From 0881c86349a3bc5325042bf33d2d66717fa8833d Mon Sep 17 00:00:00 2001 From: jjki3d Date: Sat, 17 Feb 2024 03:52:37 +0400 Subject: [PATCH] second message option --- docs/source/additional.rst | 1 + docs/source/options.rst | 9 +++++++++ olgram/commands/bot_actions.py | 5 +++++ olgram/commands/menu.py | 13 ++++++++++++- .../migrations/models/18_20240217035146_update.sql | 4 ++++ olgram/models/models.py | 1 + olgram/settings.py | 2 +- server/custom.py | 2 +- 8 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 olgram/migrations/models/18_20240217035146_update.sql diff --git a/docs/source/additional.rst b/docs/source/additional.rst index 3a837f3..95a4227 100644 --- a/docs/source/additional.rst +++ b/docs/source/additional.rst @@ -20,6 +20,7 @@ Litecoin: История изменений ---------------- +- `2024-02-17` Опция смены режима работы автоответчика: автоответчик отвечает на КАЖДОЕ сообщение - `2024-01-12` Мультиязычность (стартовое сообщение и автоответчик) - `2022-08-01` Защита от флуда - `2022-07-23` Автоответчик не пишет сообщение лишний раз diff --git a/docs/source/options.rst b/docs/source/options.rst index dead073..0fec428 100644 --- a/docs/source/options.rst +++ b/docs/source/options.rst @@ -49,3 +49,12 @@ Olgram пересылает сообщения так, чтобы сообщен При включении этой опции пользователю запрещается отправлять больше одного сообщения в минуту. Используйте её, если не успеваете обрабатывать входящие сообщения. + + +.. _always_second_message: + +Использовать автоответчик всегда +-------------------------------- + +По-умолчанию автоответчик отвечает только на первое сообщение в диалоге с пользователем. Чтобы автоответчик отвечал на +КАЖДОЕ входящее сообщение, включите эту опцию. diff --git a/olgram/commands/bot_actions.py b/olgram/commands/bot_actions.py index 668b927..8dff40f 100644 --- a/olgram/commands/bot_actions.py +++ b/olgram/commands/bot_actions.py @@ -109,6 +109,11 @@ async def additional_info(bot: Bot, call: types.CallbackQuery): await bot.save(update_fields=["enable_additional_info"]) +async def always_second_message(bot: Bot, call: types.CallbackQuery): + bot.enable_always_second_message = not bot.enable_always_second_message + await bot.save(update_fields=["enable_always_second_message"]) + + async def olgram_text(bot: Bot, call: types.CallbackQuery): if await bot.is_promo(): bot.enable_olgram_text = not bot.enable_olgram_text diff --git a/olgram/commands/menu.py b/olgram/commands/menu.py index 8d09ba9..4bc990b 100644 --- a/olgram/commands/menu.py +++ b/olgram/commands/menu.py @@ -172,6 +172,12 @@ async def send_bot_settings_menu(bot: Bot, call: types.CallbackQuery): callback_data=menu_callback.new(level=3, bot_id=bot.id, operation="antiflood", chat=empty)) ) + keyboard.insert( + types.InlineKeyboardButton(text=_("Автоответчик всегда"), + callback_data=menu_callback.new(level=3, bot_id=bot.id, + operation="always_second_message", + chat=empty)) + ) is_promo = await bot.is_promo() if is_promo: keyboard.insert( @@ -189,11 +195,13 @@ 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 _("выключены") antiflood_turn = _("включен") if bot.enable_antiflood else _("выключен") + enable_always_second_message = _("включён") if bot.enable_always_second_message else _("выключен") text = dedent(_(""" Потоки сообщений: {0} Данные пользователя: {1} Антифлуд: {2} - """)).format(thread_turn, info_turn, antiflood_turn) + Автоответчик всегда: {3} + """)).format(thread_turn, info_turn, antiflood_turn, enable_always_second_message) if is_promo: olgram_turn = _("включена") if bot.enable_olgram_text else _("выключена") @@ -523,6 +531,9 @@ async def callback(call: types.CallbackQuery, callback_data: dict, state: FSMCon if operation == "additional_info": await bot_actions.additional_info(bot, call) return await send_bot_settings_menu(bot, call) + if operation == "always_second_message": + await bot_actions.always_second_message(bot, call) + return await send_bot_settings_menu(bot, call) if operation == "olgram_text": await bot_actions.olgram_text(bot, call) return await send_bot_settings_menu(bot, call) diff --git a/olgram/migrations/models/18_20240217035146_update.sql b/olgram/migrations/models/18_20240217035146_update.sql new file mode 100644 index 0000000..6d8fd0d --- /dev/null +++ b/olgram/migrations/models/18_20240217035146_update.sql @@ -0,0 +1,4 @@ +-- upgrade -- +ALTER TABLE "bot" ADD "enable_always_second_message" BOOL NOT NULL DEFAULT False; +-- downgrade -- +ALTER TABLE "bot" DROP COLUMN "enable_always_second_message"; diff --git a/olgram/models/models.py b/olgram/models/models.py index be1211e..883acc7 100644 --- a/olgram/models/models.py +++ b/olgram/models/models.py @@ -46,6 +46,7 @@ class Bot(Model): enable_additional_info = fields.BooleanField(default=False) enable_olgram_text = fields.BooleanField(default=True) enable_antiflood = fields.BooleanField(default=False) + enable_always_second_message = fields.BooleanField(default=False) def decrypted_token(self): cryptor = DatabaseSettings.cryptor() diff --git a/olgram/settings.py b/olgram/settings.py index f6dbbda..4e99928 100644 --- a/olgram/settings.py +++ b/olgram/settings.py @@ -41,7 +41,7 @@ class OlgramSettings(AbstractSettings): @classmethod def version(cls): - return "0.6.1" + return "0.7.0" @classmethod @lru_cache diff --git a/server/custom.py b/server/custom.py index 4bb6280..c4672d4 100644 --- a/server/custom.py +++ b/server/custom.py @@ -160,7 +160,7 @@ async def handle_user_message(message: types.Message, super_chat_id: int, bot): if bot.second_text: send_auto = not await _redis.get(_last_message_uid(bot.pk, message.chat.id)) await _redis.setex(_last_message_uid(bot.pk, message.chat.id), 60 * 60 * 3, 1) - if send_auto: + if send_auto or bot.enable_always_second_message: text_obj = await BotSecondMessage.get_or_none(bot=bot, locale=str(message.from_user.locale)) return SendMessage(chat_id=message.chat.id, text=text_obj.text if text_obj else bot.second_text, parse_mode="HTML")