diff --git a/olgram/commands/bot_actions.py b/olgram/commands/bot_actions.py index ea49bbc..7d00b3a 100644 --- a/olgram/commands/bot_actions.py +++ b/olgram/commands/bot_actions.py @@ -74,3 +74,8 @@ async def select_chat(bot: Bot, call: types.CallbackQuery, chat: str): async def threads(bot: Bot, call: types.CallbackQuery): bot.enable_threads = not bot.enable_threads await bot.save(update_fields=["enable_threads"]) + + +async def additional_info(bot: Bot, call: types.CallbackQuery): + bot.enable_additional_info = not bot.enable_additional_info + await bot.save(update_fields=["enable_additional_info"]) diff --git a/olgram/commands/menu.py b/olgram/commands/menu.py index 0c55399..a491f76 100644 --- a/olgram/commands/menu.py +++ b/olgram/commands/menu.py @@ -156,6 +156,11 @@ async def send_bot_settings_menu(bot: Bot, call: types.CallbackQuery): callback_data=menu_callback.new(level=3, bot_id=bot.id, operation="threads", chat=empty)) ) + keyboard.insert( + types.InlineKeyboardButton(text="Дополнительная информация", + callback_data=menu_callback.new(level=3, bot_id=bot.id, operation="additional_info", + chat=empty)) + ) keyboard.insert( types.InlineKeyboardButton(text="<< Назад", callback_data=menu_callback.new(level=1, bot_id=bot.id, operation=empty, @@ -163,8 +168,10 @@ async def send_bot_settings_menu(bot: Bot, call: types.CallbackQuery): ) thread_turn = "включены" if bot.enable_threads else "выключены" + info_turn = "включена" if bot.enable_additional_info else "выключена" text = dedent(f""" - Потоки сообщений: {thread_turn} + Потоки сообщений: {thread_turn}\n + Дополнительная информация: {info_turn}\n """) await edit_or_create(call, text, reply_markup=keyboard, parse_mode="HTML") @@ -402,6 +409,9 @@ async def callback(call: types.CallbackQuery, callback_data: dict, state: FSMCon if operation == "threads": await bot_actions.threads(bot, call) return await send_bot_settings_menu(bot, call) + if operation == "additional_info": + await bot_actions.additional_info(bot, call) + return await send_bot_settings_menu(bot, call) if operation == "reset_text": await bot_actions.reset_bot_text(bot, call) return await send_bot_text_menu(bot, call) diff --git a/olgram/migrations/models/11_20220317080443_update.sql b/olgram/migrations/models/11_20220317080443_update.sql new file mode 100644 index 0000000..09764cf --- /dev/null +++ b/olgram/migrations/models/11_20220317080443_update.sql @@ -0,0 +1,4 @@ +-- upgrade -- +ALTER TABLE "bot" ADD "enable_additional_info" BOOL NOT NULL DEFAULT False; +-- downgrade -- +ALTER TABLE "bot" DROP COLUMN "enable_additional_info"; diff --git a/olgram/models/models.py b/olgram/models/models.py index ccabf43..b63319b 100644 --- a/olgram/models/models.py +++ b/olgram/models/models.py @@ -42,6 +42,7 @@ class Bot(Model): outgoing_messages_count = fields.BigIntField(default=0) enable_threads = fields.BooleanField(default=False) + enable_additional_info = fields.BooleanField(default=False) def decrypted_token(self): cryptor = DatabaseSettings.cryptor() diff --git a/server/custom.py b/server/custom.py index dca7de7..3b8f3b1 100644 --- a/server/custom.py +++ b/server/custom.py @@ -56,6 +56,8 @@ async def message_handler(message: types.Message, *args, **kwargs): return SendMessage(chat_id=message.chat.id, text="Вы заблокированы в этом боте") + in_thread = False + # Пересылаем сообщение в супер-чат if is_super_group and bot.enable_threads: thread_first_message = await _redis.get(_thread_uniqie_id(bot.pk, message.chat.id)) @@ -63,6 +65,7 @@ async def message_handler(message: types.Message, *args, **kwargs): # переслать в супер-чат, отвечая на предыдущее сообщение try: new_message = await message.copy_to(super_chat_id, reply_to_message_id=int(thread_first_message)) + in_thread = True except exceptions.BadRequest: new_message = await message.forward(super_chat_id) await _redis.set(_thread_uniqie_id(bot.pk, message.chat.id), new_message.message_id, @@ -78,6 +81,15 @@ async def message_handler(message: types.Message, *args, **kwargs): await _redis.set(_message_unique_id(bot.pk, new_message.message_id), message.chat.id, pexpire=ServerSettings.redis_timeout_ms()) + if bot.enable_additional_info and not in_thread: + user_info = "От пользователя: " + if message.from_user.full_name: + user_info += message.from_user.full_name + if message.from_user.username: + user_info += " | @" + message.from_user.username + user_info += f" | #{message.from_user.id}" + await message.bot.send_message(super_chat_id, text=user_info, reply_to_message_id=new_message.message_id) + bot.incoming_messages_count = F("incoming_messages_count") + 1 await bot.save(update_fields=["incoming_messages_count"])