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")