diff --git a/bot.py b/bot.py index 6dd6ed3..24e43eb 100644 --- a/bot.py +++ b/bot.py @@ -1,13 +1,10 @@ from core import BotTelegramCore -from mixins import (BaseCommandsBotMixin, CallbackBotMixin, ErrorBotMixin, - MessageBotMixin, StickerBotMixin) +from commands import handlers -class JerimumBot(BaseCommandsBotMixin, CallbackBotMixin, ErrorBotMixin, - MessageBotMixin, StickerBotMixin): +class JerimumBot(BotTelegramCore): """Bot Controller""" def config_handlers(self): - for BaseClass in self.__class__.__bases__: - assert issubclass(BaseClass, BotTelegramCore) - BaseClass.config_handlers(self) + for config_handler in handlers: + config_handler(self) diff --git a/commands/__init__.py b/commands/__init__.py new file mode 100644 index 0000000..b68573a --- /dev/null +++ b/commands/__init__.py @@ -0,0 +1,14 @@ +from commands.base import config_handlers as base_handler +from commands.callback import config_handlers as callback_handler +from commands.error import config_handlers as error_handler +from commands.message import config_handlers as message_handler +from commands.sticker import config_handlers as sticker_handler + + +handlers = [ + base_handler, + callback_handler, + error_handler, + message_handler, + sticker_handler +] diff --git a/commands/base.py b/commands/base.py new file mode 100644 index 0000000..7186996 --- /dev/null +++ b/commands/base.py @@ -0,0 +1,43 @@ +import logging + +from telegram.ext import CommandHandler + +from core import BotTelegramCore, adm_verify +from messages import START, HELP, DESCRIPTION, RULES_COMPLETE + + +logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + level=logging.INFO) + +logger = logging.getLogger(__name__) + + +def description(bot, update): + """Send a message with the group description.""" + if adm_verify(update): + update.message.reply_text(DESCRIPTION) + else: + bot.sendMessage( + chat_id=update.message.from_user.id, + text=DESCRIPTION) + + +def rules(bot, update): + """Send a message with the group rules.""" + if adm_verify(update): + update.message.reply_text(RULES_COMPLETE) + else: + bot.sendMessage( + chat_id=update.message.from_user.id, + text=RULES_COMPLETE) + + +def config_handlers(instance: BotTelegramCore): + logging.info('Configurando comandos base do bot...') + dp = instance.updater.dispatcher + + dp.add_handler(CommandHandler("regras", rules)) + dp.add_handler(CommandHandler("descricao", description)) + + dp.add_handler(CommandHandler("start", lambda bot, update: update.message.reply_text(START))) + dp.add_handler(CommandHandler("ajuda", lambda bot, update: update.message.reply_text(HELP))) diff --git a/commands/callback.py b/commands/callback.py new file mode 100644 index 0000000..9eb2834 --- /dev/null +++ b/commands/callback.py @@ -0,0 +1,32 @@ +import logging + +from telegram.ext import CallbackQueryHandler + +from core import BotTelegramCore +from messages import RULES_BIT + + +logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + level=logging.INFO) + +logger = logging.getLogger(__name__) + + +def handle_callback(bot, update): + query = update.callback_query + + if query.data == "rules": + bot.answer_callback_query( + callback_query_id=query.id, + text=RULES_BIT, + show_alert=True + ) + elif query.data == "site": + bot.answer_callback_query( + callback_query_id=query.id + ) + + +def config_handlers(instance: BotTelegramCore): + logging.info('Configurando callback handler do bot...') + instance.updater.dispatcher.add_handler(CallbackQueryHandler(handle_callback)) diff --git a/commands/error.py b/commands/error.py new file mode 100644 index 0000000..8bf556b --- /dev/null +++ b/commands/error.py @@ -0,0 +1,25 @@ +import logging + +from core import BotTelegramCore +from messages import ERROR_BLOCKED, ERROR_INITIATE + + +logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + level=logging.INFO) + +logger = logging.getLogger(__name__) + + +def error(bot, update, err): + """Log Errors caused by Updates.""" + if err.message == "Forbidden: bot can't initiate conversation with a user": + update.message.reply_text(ERROR_INITIATE) + elif err.message == "Forbidden: bot was blocked by the user": + update.message.reply_text(ERROR_BLOCKED) + else: + logger.warning('Update "%s" caused error "%s"', update, err) + + +def config_handlers(instance: BotTelegramCore): + logging.info('Configurando error handler do bot...') + instance.updater.dispatcher.add_error_handler(error) diff --git a/commands/message.py b/commands/message.py new file mode 100644 index 0000000..1be7e33 --- /dev/null +++ b/commands/message.py @@ -0,0 +1,60 @@ +import logging + +from telegram import InlineKeyboardButton, InlineKeyboardMarkup +from telegram.ext import MessageHandler, Filters + +from core import BotTelegramCore +from messages import BYE, WELCOME + + +logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + level=logging.INFO) + +logger = logging.getLogger(__name__) + + +def welcome(bot, update): + """Send a message when a new user join the group.""" + welcome_message = WELCOME.format(full_name=update.message.new_chat_members[0].full_name) + + keyboard = [ + [ + InlineKeyboardButton( + "Resumo das regras!", + callback_data='rules') + ], + + [ + InlineKeyboardButton( + "Nosso site!", + callback_data='site', + url="http://jerimumhacker.space/"), + + InlineKeyboardButton( + "Nosso Facebook!", + callback_data='site', + url="https://www.facebook.com/JerimumHS/") + ], + + [ + InlineKeyboardButton( + "Nosso GitHub!", + callback_data='site', + url="https://github.com/jerimumhs/") + ] + ] + + reply_markup = InlineKeyboardMarkup(keyboard) + update.message.reply_text(welcome_message, reply_markup=reply_markup) + + +def config_handlers(instance: BotTelegramCore): + logging.info('Configurando message handlers do bot...') + + instance.updater.dispatcher.add_handler(MessageHandler( + Filters.status_update.new_chat_members, welcome)) + + instance.updater.dispatcher.add_handler(MessageHandler( + Filters.status_update.left_chat_member, + lambda bot, update: update.message.reply_text( + BYE.format(full_name=update.message.left_chat_member.full_name)))) diff --git a/commands/sticker.py b/commands/sticker.py new file mode 100644 index 0000000..1c798ce --- /dev/null +++ b/commands/sticker.py @@ -0,0 +1,19 @@ +import logging + +from telegram.ext import (CommandHandler) + +from core import BotTelegramCore + + +logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + level=logging.INFO) + +logger = logging.getLogger(__name__) + + +def config_handlers(instance: BotTelegramCore): + logging.info('Configurando comandos de sticker do bot...') + + instance.updater.dispatcher.add_handler(CommandHandler("xinga", lambda bot, update: bot.send_sticker( + sticker="CAADAQADCgEAAmOWFQq4zU4TMS08AwI", + chat_id=update.message.chat_id))) diff --git a/mixins/__init__.py b/mixins/__init__.py deleted file mode 100644 index 9ccc50f..0000000 --- a/mixins/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from mixins.base_commands import BaseCommandsBotMixin -from mixins.callback import CallbackBotMixin -from mixins.error import ErrorBotMixin -from mixins.message import MessageBotMixin -from mixins.sticker import StickerBotMixin diff --git a/mixins/base_commands.py b/mixins/base_commands.py deleted file mode 100644 index 23a1c4c..0000000 --- a/mixins/base_commands.py +++ /dev/null @@ -1,44 +0,0 @@ -import logging - -from telegram.ext import CommandHandler - -from core import BotTelegramCore, adm_verify -from messages import START, HELP, DESCRIPTION, RULES_COMPLETE - - -logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', - level=logging.INFO) - -logger = logging.getLogger(__name__) - - -class BaseCommandsBotMixin(BotTelegramCore): - def config_handlers(self): - logging.info('Configurando comandos base do bot...') - dp = self.updater.dispatcher - - dp.add_handler(CommandHandler("regras", self.__class__.rules)) - dp.add_handler(CommandHandler("descricao", self.__class__.description)) - - dp.add_handler(CommandHandler("start", lambda bot, update: update.message.reply_text(START))) - dp.add_handler(CommandHandler("ajuda", lambda bot, update: update.message.reply_text(HELP))) - - @staticmethod - def description(bot, update): - """Send a message with the group description.""" - if adm_verify(update): - update.message.reply_text(DESCRIPTION) - else: - bot.sendMessage( - chat_id=update.message.from_user.id, - text=DESCRIPTION) - - @staticmethod - def rules(bot, update): - """Send a message with the group rules.""" - if adm_verify(update): - update.message.reply_text(RULES_COMPLETE) - else: - bot.sendMessage( - chat_id=update.message.from_user.id, - text=RULES_COMPLETE) diff --git a/mixins/callback.py b/mixins/callback.py deleted file mode 100644 index 63cee50..0000000 --- a/mixins/callback.py +++ /dev/null @@ -1,33 +0,0 @@ -import logging - -from telegram.ext import CallbackQueryHandler - -from core import BotTelegramCore -from messages import RULES_BIT - - -logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', - level=logging.INFO) - -logger = logging.getLogger(__name__) - - -class CallbackBotMixin(BotTelegramCore): - def config_handlers(self): - logging.info('Configurando callback handler do bot...') - self.updater.dispatcher.add_handler(CallbackQueryHandler(self.__class__.handle_callback)) - - @staticmethod - def handle_callback(bot, update): - query = update.callback_query - - if query.data == "rules": - bot.answer_callback_query( - callback_query_id=query.id, - text=RULES_BIT, - show_alert=True - ) - elif query.data == "site": - bot.answer_callback_query( - callback_query_id=query.id - ) diff --git a/mixins/error.py b/mixins/error.py deleted file mode 100644 index 5c1a008..0000000 --- a/mixins/error.py +++ /dev/null @@ -1,26 +0,0 @@ -import logging - -from core import BotTelegramCore -from messages import ERROR_BLOCKED, ERROR_INITIATE - - -logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', - level=logging.INFO) - -logger = logging.getLogger(__name__) - - -class ErrorBotMixin(BotTelegramCore): - def config_handlers(self): - logging.info('Configurando error handler do bot...') - self.updater.dispatcher.add_error_handler(self.__class__.error) - - @staticmethod - def error(bot, update, err): - """Log Errors caused by Updates.""" - if err.message == "Forbidden: bot can't initiate conversation with a user": - update.message.reply_text(ERROR_INITIATE) - elif err.message == "Forbidden: bot was blocked by the user": - update.message.reply_text(ERROR_BLOCKED) - else: - logger.warning('Update "%s" caused error "%s"', update, err) diff --git a/mixins/message.py b/mixins/message.py deleted file mode 100644 index 88a5391..0000000 --- a/mixins/message.py +++ /dev/null @@ -1,61 +0,0 @@ -import logging - -from telegram import InlineKeyboardButton, InlineKeyboardMarkup -from telegram.ext import MessageHandler, Filters - -from core import BotTelegramCore -from messages import BYE, WELCOME - - -logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', - level=logging.INFO) - -logger = logging.getLogger(__name__) - - -class MessageBotMixin(BotTelegramCore): - def config_handlers(self): - logging.info('Configurando message handlers do bot...') - - self.updater.dispatcher.add_handler(MessageHandler( - Filters.status_update.new_chat_members, self.__class__.welcome)) - - self.updater.dispatcher.add_handler(MessageHandler( - Filters.status_update.left_chat_member, - lambda bot, update: update.message.reply_text( - BYE.format(full_name=update.message.left_chat_member.full_name)))) - - @staticmethod - def welcome(bot, update): - """Send a message when a new user join the group.""" - welcome_message = WELCOME.format(full_name=update.message.new_chat_members[0].full_name) - - keyboard = [ - [ - InlineKeyboardButton( - "Resumo das regras!", - callback_data='rules') - ], - - [ - InlineKeyboardButton( - "Nosso site!", - callback_data='site', - url="http://jerimumhacker.space/"), - - InlineKeyboardButton( - "Nosso Facebook!", - callback_data='site', - url="https://www.facebook.com/JerimumHS/") - ], - - [ - InlineKeyboardButton( - "Nosso GitHub!", - callback_data='site', - url="https://github.com/jerimumhs/") - ] - ] - - reply_markup = InlineKeyboardMarkup(keyboard) - update.message.reply_text(welcome_message, reply_markup=reply_markup) diff --git a/mixins/sticker.py b/mixins/sticker.py deleted file mode 100644 index 678dd64..0000000 --- a/mixins/sticker.py +++ /dev/null @@ -1,20 +0,0 @@ -import logging - -from telegram.ext import (CommandHandler) - -from core import BotTelegramCore - - -logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', - level=logging.INFO) - -logger = logging.getLogger(__name__) - - -class StickerBotMixin(BotTelegramCore): - def config_handlers(self): - logging.info('Configurando comandos de sticker do bot...') - - self.updater.dispatcher.add_handler(CommandHandler("xinga", lambda bot, update: bot.send_sticker( - sticker="CAADAQADCgEAAmOWFQq4zU4TMS08AwI", - chat_id=update.message.chat_id)))