From 65d5e367c22a677433237c67d514aecba589f39a Mon Sep 17 00:00:00 2001 From: rodrigondec Date: Fri, 4 Oct 2019 23:03:20 -0300 Subject: [PATCH 1/6] base commands as module --- bot.py | 4 +++- commands/__init__.py | 12 ++++++++++++ commands/base.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 commands/__init__.py create mode 100644 commands/base.py diff --git a/bot.py b/bot.py index 6dd6ed3..9c961a5 100644 --- a/bot.py +++ b/bot.py @@ -1,9 +1,10 @@ from core import BotTelegramCore from mixins import (BaseCommandsBotMixin, CallbackBotMixin, ErrorBotMixin, MessageBotMixin, StickerBotMixin) +from commands import config_handlers -class JerimumBot(BaseCommandsBotMixin, CallbackBotMixin, ErrorBotMixin, +class JerimumBot(CallbackBotMixin, ErrorBotMixin, MessageBotMixin, StickerBotMixin): """Bot Controller""" @@ -11,3 +12,4 @@ def config_handlers(self): for BaseClass in self.__class__.__bases__: assert issubclass(BaseClass, BotTelegramCore) BaseClass.config_handlers(self) + config_handlers(self) diff --git a/commands/__init__.py b/commands/__init__.py new file mode 100644 index 0000000..ef3df10 --- /dev/null +++ b/commands/__init__.py @@ -0,0 +1,12 @@ +from commands.base import config_handlers as base_handler +from core import BotTelegramCore + + +handlers = [ + base_handler +] + + +def config_handlers(instance: BotTelegramCore): + for handler in handlers: + handler(instance) 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))) From d9de13a0daf4f7d6cd88beebde8d3257af6bfc4a Mon Sep 17 00:00:00 2001 From: rodrigondec Date: Fri, 4 Oct 2019 23:07:34 -0300 Subject: [PATCH 2/6] for inside bot config_handlers --- bot.py | 5 +++-- commands/__init__.py | 6 ------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/bot.py b/bot.py index 9c961a5..1de9acc 100644 --- a/bot.py +++ b/bot.py @@ -1,7 +1,7 @@ from core import BotTelegramCore from mixins import (BaseCommandsBotMixin, CallbackBotMixin, ErrorBotMixin, MessageBotMixin, StickerBotMixin) -from commands import config_handlers +from commands import handlers class JerimumBot(CallbackBotMixin, ErrorBotMixin, @@ -12,4 +12,5 @@ def config_handlers(self): for BaseClass in self.__class__.__bases__: assert issubclass(BaseClass, BotTelegramCore) BaseClass.config_handlers(self) - config_handlers(self) + for handler in handlers: + handler(self) diff --git a/commands/__init__.py b/commands/__init__.py index ef3df10..edc83ac 100644 --- a/commands/__init__.py +++ b/commands/__init__.py @@ -1,12 +1,6 @@ from commands.base import config_handlers as base_handler -from core import BotTelegramCore handlers = [ base_handler ] - - -def config_handlers(instance: BotTelegramCore): - for handler in handlers: - handler(instance) From 7770f0e4792a1c615b9ba038ad180c0ee853231d Mon Sep 17 00:00:00 2001 From: rodrigondec Date: Fri, 4 Oct 2019 23:35:02 -0300 Subject: [PATCH 3/6] removed mixins & base_commands --- mixins/__init__.py | 5 ----- mixins/base_commands.py | 44 ----------------------------------------- 2 files changed, 49 deletions(-) delete mode 100644 mixins/__init__.py delete mode 100644 mixins/base_commands.py 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) From 13863f3928b9149ca41cfe1bc1982e038270d849 Mon Sep 17 00:00:00 2001 From: rodrigondec Date: Fri, 4 Oct 2019 23:35:23 -0300 Subject: [PATCH 4/6] mixins objects now as python modules --- commands/callback.py | 32 +++++++++++++++++++++++ commands/error.py | 25 ++++++++++++++++++ commands/message.py | 60 +++++++++++++++++++++++++++++++++++++++++++ commands/sticker.py | 19 ++++++++++++++ mixins/callback.py | 33 ------------------------ mixins/error.py | 26 ------------------- mixins/message.py | 61 -------------------------------------------- mixins/sticker.py | 20 --------------- 8 files changed, 136 insertions(+), 140 deletions(-) create mode 100644 commands/callback.py create mode 100644 commands/error.py create mode 100644 commands/message.py create mode 100644 commands/sticker.py delete mode 100644 mixins/callback.py delete mode 100644 mixins/error.py delete mode 100644 mixins/message.py delete mode 100644 mixins/sticker.py 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/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))) From 110d9ce36278bb93599deba920ce87f70a6b77ec Mon Sep 17 00:00:00 2001 From: rodrigondec Date: Fri, 4 Oct 2019 23:35:32 -0300 Subject: [PATCH 5/6] import each handler on list --- commands/__init__.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/commands/__init__.py b/commands/__init__.py index edc83ac..b68573a 100644 --- a/commands/__init__.py +++ b/commands/__init__.py @@ -1,6 +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 + base_handler, + callback_handler, + error_handler, + message_handler, + sticker_handler ] From 82c0b1157b6102eeea66a325fe3bea21a37224df Mon Sep 17 00:00:00 2001 From: rodrigondec Date: Fri, 4 Oct 2019 23:35:47 -0300 Subject: [PATCH 6/6] Bot config_handlers with commands modules --- bot.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/bot.py b/bot.py index 1de9acc..24e43eb 100644 --- a/bot.py +++ b/bot.py @@ -1,16 +1,10 @@ from core import BotTelegramCore -from mixins import (BaseCommandsBotMixin, CallbackBotMixin, ErrorBotMixin, - MessageBotMixin, StickerBotMixin) from commands import handlers -class JerimumBot(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 handler in handlers: - handler(self) + for config_handler in handlers: + config_handler(self)