mirror of
				https://github.com/civsocit/olgram.git
				synced 2025-10-31 01:53:26 +00:00 
			
		
		
		
	Compare commits
	
		
			No commits in common. "23055908991880f0b41fcd9b85e2559a48e8d459" and "59da56d46367e6854ae9d27a97c4878585f6de07" have entirely different histories.
		
	
	
		
			2305590899
			...
			59da56d463
		
	
		
|  | @ -140,11 +140,6 @@ async def mailing(bot: Bot, call: types.CallbackQuery): | ||||||
|     await bot.save(update_fields=["enable_mailing"]) |     await bot.save(update_fields=["enable_mailing"]) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| async def tags(bot: Bot, call: types.CallbackQuery): |  | ||||||
|     bot.enable_tags = not bot.enable_tags |  | ||||||
|     await bot.save(update_fields=["enable_tags"]) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| async def go_mailing(bot: Bot, context: dict) -> int: | async def go_mailing(bot: Bot, context: dict) -> int: | ||||||
|     users = await bot.mailing_users |     users = await bot.mailing_users | ||||||
|     a_bot = AioBot(bot.decrypted_token()) |     a_bot = AioBot(bot.decrypted_token()) | ||||||
|  |  | ||||||
|  | @ -197,12 +197,6 @@ async def send_bot_settings_menu(bot: Bot, call: types.CallbackQuery): | ||||||
|                                                                    operation="thread_interrupt", |                                                                    operation="thread_interrupt", | ||||||
|                                                                    chat=empty)) |                                                                    chat=empty)) | ||||||
|     ) |     ) | ||||||
|     keyboard.insert( |  | ||||||
|         types.InlineKeyboardButton(text=_("Теги"), |  | ||||||
|                                    callback_data=menu_callback.new(level=3, bot_id=bot.id, |  | ||||||
|                                                                    operation="tags", |  | ||||||
|                                                                    chat=empty)) |  | ||||||
|     ) |  | ||||||
|     is_promo = await bot.is_promo() |     is_promo = await bot.is_promo() | ||||||
|     if is_promo: |     if is_promo: | ||||||
|         keyboard.insert( |         keyboard.insert( | ||||||
|  | @ -223,7 +217,6 @@ async def send_bot_settings_menu(bot: Bot, call: types.CallbackQuery): | ||||||
|     enable_always_second_message = _("включён") if bot.enable_always_second_message else _("выключен") |     enable_always_second_message = _("включён") if bot.enable_always_second_message else _("выключен") | ||||||
|     thread_interrupt = _("да") if bot.enable_thread_interrupt else _("нет") |     thread_interrupt = _("да") if bot.enable_thread_interrupt else _("нет") | ||||||
|     mailing_turn = _("включена") if bot.enable_mailing else _("выключена") |     mailing_turn = _("включена") if bot.enable_mailing else _("выключена") | ||||||
|     tags_turn = _("включены") if bot.enable_tags else _("выключены") |  | ||||||
|     text = dedent(_(""" |     text = dedent(_(""" | ||||||
|     <a href="https://olgram.readthedocs.io/ru/latest/options.html#threads">Потоки сообщений</a>: <b>{0}</b> |     <a href="https://olgram.readthedocs.io/ru/latest/options.html#threads">Потоки сообщений</a>: <b>{0}</b> | ||||||
|     <a href="https://olgram.readthedocs.io/ru/latest/options.html#user-info">Данные пользователя</a>: <b>{1}</b> |     <a href="https://olgram.readthedocs.io/ru/latest/options.html#user-info">Данные пользователя</a>: <b>{1}</b> | ||||||
|  | @ -231,9 +224,8 @@ async def send_bot_settings_menu(bot: Bot, call: types.CallbackQuery): | ||||||
|     <a href="https://olgram.readthedocs.io/ru/latest/options.html#always_second_message">Автоответчик всегда</a>: <b>{3}</b> |     <a href="https://olgram.readthedocs.io/ru/latest/options.html#always_second_message">Автоответчик всегда</a>: <b>{3}</b> | ||||||
|     <a href="https://olgram.readthedocs.io/ru/latest/options.html#thread_interrupt">Прерывать поток</a>: <b>{4}</b> |     <a href="https://olgram.readthedocs.io/ru/latest/options.html#thread_interrupt">Прерывать поток</a>: <b>{4}</b> | ||||||
|     <a href="https://olgram.readthedocs.io/ru/latest/options.html#mailing">Рассылка</a>: <b>{5}</b> |     <a href="https://olgram.readthedocs.io/ru/latest/options.html#mailing">Рассылка</a>: <b>{5}</b> | ||||||
|     Теги: <b>{6}</b> |  | ||||||
|     """)).format(thread_turn, info_turn, antiflood_turn, enable_always_second_message, thread_interrupt, |     """)).format(thread_turn, info_turn, antiflood_turn, enable_always_second_message, thread_interrupt, | ||||||
|                  mailing_turn, tags_turn) |                  mailing_turn) | ||||||
| 
 | 
 | ||||||
|     if is_promo: |     if is_promo: | ||||||
|         olgram_turn = _("включена") if bot.enable_olgram_text else _("выключена") |         olgram_turn = _("включена") if bot.enable_olgram_text else _("выключена") | ||||||
|  | @ -680,9 +672,6 @@ async def callback(call: types.CallbackQuery, callback_data: dict, state: FSMCon | ||||||
|         if operation == "mailing": |         if operation == "mailing": | ||||||
|             await bot_actions.mailing(bot, call) |             await bot_actions.mailing(bot, call) | ||||||
|             return await send_bot_settings_menu(bot, call) |             return await send_bot_settings_menu(bot, call) | ||||||
|         if operation == "tags": |  | ||||||
|             await bot_actions.tags(bot, call) |  | ||||||
|             return await send_bot_settings_menu(bot, call) |  | ||||||
|         if operation == "thread_interrupt": |         if operation == "thread_interrupt": | ||||||
|             await bot_actions.thread_interrupt(bot, call) |             await bot_actions.thread_interrupt(bot, call) | ||||||
|             return await send_bot_settings_menu(bot, call) |             return await send_bot_settings_menu(bot, call) | ||||||
|  |  | ||||||
|  | @ -1,4 +0,0 @@ | ||||||
| -- upgrade -- |  | ||||||
| ALTER TABLE "bot" ADD "enable_tags" BOOL NOT NULL  DEFAULT False; |  | ||||||
| -- downgrade -- |  | ||||||
| ALTER TABLE "bot" DROP COLUMN "enable_tags"; |  | ||||||
|  | @ -49,7 +49,6 @@ class Bot(Model): | ||||||
|     enable_always_second_message = fields.BooleanField(default=False) |     enable_always_second_message = fields.BooleanField(default=False) | ||||||
|     enable_thread_interrupt = fields.BooleanField(default=True) |     enable_thread_interrupt = fields.BooleanField(default=True) | ||||||
|     enable_mailing = fields.BooleanField(default=False) |     enable_mailing = fields.BooleanField(default=False) | ||||||
|     enable_tags = fields.BooleanField(default=False) |  | ||||||
|     last_mailing_at = fields.DatetimeField(null=True, default=None) |     last_mailing_at = fields.DatetimeField(null=True, default=None) | ||||||
| 
 | 
 | ||||||
|     def decrypted_token(self): |     def decrypted_token(self): | ||||||
|  |  | ||||||
|  | @ -40,7 +40,7 @@ class OlgramSettings(AbstractSettings): | ||||||
| 
 | 
 | ||||||
|     @classmethod |     @classmethod | ||||||
|     def version(cls): |     def version(cls): | ||||||
|         return "0.7.3" |         return "0.7.2" | ||||||
| 
 | 
 | ||||||
|     @classmethod |     @classmethod | ||||||
|     @lru_cache |     @lru_cache | ||||||
|  |  | ||||||
|  | @ -81,7 +81,7 @@ def _on_security_policy(message: types.Message, bot): | ||||||
|                        parse_mode="HTML") |                        parse_mode="HTML") | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| async def send_user_message(message: types.Message, super_chat_id: int, bot, tag: str = ""): | async def send_user_message(message: types.Message, super_chat_id: int, bot): | ||||||
|     """Переслать сообщение от пользователя, добавлять к нему user info при необходимости""" |     """Переслать сообщение от пользователя, добавлять к нему user info при необходимости""" | ||||||
|     if bot.enable_additional_info: |     if bot.enable_additional_info: | ||||||
|         user_info = _("Сообщение от пользователя ") |         user_info = _("Сообщение от пользователя ") | ||||||
|  | @ -106,15 +106,6 @@ async def send_user_message(message: types.Message, super_chat_id: int, bot, tag | ||||||
|             new_message_2 = await message.copy_to(super_chat_id, reply_to_message_id=new_message.message_id) |             new_message_2 = await message.copy_to(super_chat_id, reply_to_message_id=new_message.message_id) | ||||||
|             await _redis.set(_message_unique_id(bot.pk, new_message_2.message_id), message.chat.id, |             await _redis.set(_message_unique_id(bot.pk, new_message_2.message_id), message.chat.id, | ||||||
|                              pexpire=ServerSettings.redis_timeout_ms()) |                              pexpire=ServerSettings.redis_timeout_ms()) | ||||||
|     elif tag: |  | ||||||
|         # добавлять тег в конец текста |  | ||||||
|         if message.content_type == types.ContentType.TEXT and len(message.text) + len(tag) < 4093: |  | ||||||
|             new_message = await message.bot.send_message(super_chat_id, message.text + "\n\n" + tag) |  | ||||||
|         else: |  | ||||||
|             new_message = await message.bot.send_message(super_chat_id, text=tag) |  | ||||||
|             new_message_2 = await message.copy_to(super_chat_id, reply_to_message_id=new_message.message_id) |  | ||||||
|             await _redis.set(_message_unique_id(bot.pk, new_message_2.message_id), message.chat.id, |  | ||||||
|                              pexpire=ServerSettings.redis_timeout_ms()) |  | ||||||
|     else: |     else: | ||||||
|         try: |         try: | ||||||
|             new_message = await message.forward(super_chat_id) |             new_message = await message.forward(super_chat_id) | ||||||
|  | @ -128,13 +119,6 @@ async def send_user_message(message: types.Message, super_chat_id: int, bot, tag | ||||||
| 
 | 
 | ||||||
| async def send_to_superchat(is_super_group: bool, message: types.Message, super_chat_id: int, bot): | async def send_to_superchat(is_super_group: bool, message: types.Message, super_chat_id: int, bot): | ||||||
|     """Пересылка сообщения от пользователя оператору (логика потоков сообщений)""" |     """Пересылка сообщения от пользователя оператору (логика потоков сообщений)""" | ||||||
|     if bot.enable_tags: |  | ||||||
|         tag = await _redis.get(_tag_uid(bot.pk, message.chat.id), encoding="utf-8") |  | ||||||
|     else: |  | ||||||
|         tag = "" |  | ||||||
|     if tag: |  | ||||||
|         tag = str(tag) |  | ||||||
| 
 |  | ||||||
|     if is_super_group and bot.enable_threads: |     if is_super_group and bot.enable_threads: | ||||||
|         if bot.enable_thread_interrupt: |         if bot.enable_thread_interrupt: | ||||||
|             thread_timeout = ServerSettings.thread_timeout_ms() |             thread_timeout = ServerSettings.thread_timeout_ms() | ||||||
|  | @ -144,34 +128,20 @@ async def send_to_superchat(is_super_group: bool, message: types.Message, super_ | ||||||
|         if thread_first_message: |         if thread_first_message: | ||||||
|             # переслать в супер-чат, отвечая на предыдущее сообщение |             # переслать в супер-чат, отвечая на предыдущее сообщение | ||||||
|             try: |             try: | ||||||
|                 if tag: |  | ||||||
|                     if message.content_type == types.ContentType.TEXT and len(message.text) + len(tag) < 4093: |  | ||||||
|                         new_message = await message.bot.send_message( |  | ||||||
|                             super_chat_id, |  | ||||||
|                             message.text + "\n\n" + tag, |  | ||||||
|                             reply_to_message_id=int(thread_first_message)) |  | ||||||
|                     else: |  | ||||||
|                         new_message = await message.copy_to(super_chat_id, |  | ||||||
|                                                             reply_to_message_id=int(thread_first_message)) |  | ||||||
|                         new_message_2 = await message.bot.send_message( |  | ||||||
|                             super_chat_id, reply_to_message_id=new_message.message_id, text=tag) |  | ||||||
|                         await _redis.set(_message_unique_id(bot.pk, new_message_2.message_id), message.chat.id, |  | ||||||
|                                          pexpire=thread_timeout) |  | ||||||
|                 else: |  | ||||||
|                 new_message = await message.copy_to(super_chat_id, reply_to_message_id=int(thread_first_message)) |                 new_message = await message.copy_to(super_chat_id, reply_to_message_id=int(thread_first_message)) | ||||||
|                 await _redis.set(_message_unique_id(bot.pk, new_message.message_id), message.chat.id, |                 await _redis.set(_message_unique_id(bot.pk, new_message.message_id), message.chat.id, | ||||||
|                                  pexpire=thread_timeout) |                                  pexpire=thread_timeout) | ||||||
|             except exceptions.BadRequest: |             except exceptions.BadRequest: | ||||||
|                 new_message = await send_user_message(message, super_chat_id, bot, tag) |                 new_message = await send_user_message(message, super_chat_id, bot) | ||||||
|                 await _redis.set( |                 await _redis.set( | ||||||
|                     _thread_unique_id(bot.pk, message.chat.id), new_message.message_id, pexpire=thread_timeout) |                     _thread_unique_id(bot.pk, message.chat.id), new_message.message_id, pexpire=thread_timeout) | ||||||
|         else: |         else: | ||||||
|             # переслать супер-чат |             # переслать супер-чат | ||||||
|             new_message = await send_user_message(message, super_chat_id, bot, tag) |             new_message = await send_user_message(message, super_chat_id, bot) | ||||||
|             await _redis.set(_thread_unique_id(bot.pk, message.chat.id), new_message.message_id, |             await _redis.set(_thread_unique_id(bot.pk, message.chat.id), new_message.message_id, | ||||||
|                              pexpire=thread_timeout) |                              pexpire=thread_timeout) | ||||||
|     else:  # личные сообщения не поддерживают потоки сообщений: просто отправляем сообщение |     else:  # личные сообщения не поддерживают потоки сообщений: просто отправляем сообщение | ||||||
|         await send_user_message(message, super_chat_id, bot, tag) |         await send_user_message(message, super_chat_id, bot) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| async def _increase_count(_bot): | async def _increase_count(_bot): | ||||||
|  | @ -205,9 +175,6 @@ async def handle_user_message(message: types.Message, super_chat_id: int, bot): | ||||||
|         await send_to_superchat(is_super_group, message, super_chat_id, bot) |         await send_to_superchat(is_super_group, message, super_chat_id, bot) | ||||||
|     except (exceptions.Unauthorized, exceptions.ChatNotFound): |     except (exceptions.Unauthorized, exceptions.ChatNotFound): | ||||||
|         return SendMessage(chat_id=message.chat.id, text=_("Не удаётся связаться с владельцем бота")) |         return SendMessage(chat_id=message.chat.id, text=_("Не удаётся связаться с владельцем бота")) | ||||||
|     except exceptions.RetryAfter: |  | ||||||
|         return SendMessage(chat_id=message.chat.id, text=_("Слишком много сообщений, подождите одну минуту"), |  | ||||||
|                            reply_to_message_id=message.message_id) |  | ||||||
|     except exceptions.TelegramAPIError as err: |     except exceptions.TelegramAPIError as err: | ||||||
|         _logger.error(f"(exception on forwarding) {err}") |         _logger.error(f"(exception on forwarding) {err}") | ||||||
|         return |         return | ||||||
|  | @ -256,7 +223,6 @@ async def handle_operator_message(message: types.Message, super_chat_id: int, bo | ||||||
|             else: |             else: | ||||||
|                 await banned_user.delete() |                 await banned_user.delete() | ||||||
|                 return SendMessage(chat_id=message.chat.id, text=_("Пользователь разбанен")) |                 return SendMessage(chat_id=message.chat.id, text=_("Пользователь разбанен")) | ||||||
|         if bot.enable_tags: |  | ||||||
|         if message.text and message.text.startswith("/tag "): |         if message.text and message.text.startswith("/tag "): | ||||||
|             tag = message.text.replace("/tag ", "")[:20].strip() |             tag = message.text.replace("/tag ", "")[:20].strip() | ||||||
|             if tag: |             if tag: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user