diff --git a/adapters/tg.py b/adapters/tg.py index 3b2470f..bf4c6b4 100644 --- a/adapters/tg.py +++ b/adapters/tg.py @@ -12,6 +12,7 @@ from aiogram import F from core.bitflip import handle_bitflip_command from core.link import handle_links +from core.promote import handle_promote_command from core.repeater import MessageRepeater from core.simple import handle_start_command, handle_baka, dummy_handler, handle_info_command from core.actions import handle_actions, handle_reverse_actions @@ -39,6 +40,8 @@ class TelegramAdapter: router.message(Command('info'))(handle_info_command) # bitflip 模块 router.message(Command('bitflip'))(handle_bitflip_command) + # promote 模块 + router.message(Command('t'))(handle_promote_command) # stats 模块 router.message(Command('stats'))(handle_stats_command) # unpin 模块 diff --git a/core/promote.py b/core/promote.py new file mode 100644 index 0000000..c3a81f5 --- /dev/null +++ b/core/promote.py @@ -0,0 +1,48 @@ +from aiogram.exceptions import TelegramBadRequest +from aiogram.types import Message + +from config import config + + +async def handle_promote_command(message: Message) -> None: + title = message.text.replace('/t', '').strip() + if not config.is_feature_enabled('promote', message.chat.id): + return + if message.chat.type not in ['group', 'supergroup']: + return + try: + if not message.reply_to_message: + await message.reply('咱不知道给谁头衔呢') + return + if not title: + await message.reply('咱不知道给什么头衔呢') + return + else: + member = await message.chat.get_member(message.reply_to_message.from_user.id) + if len(title) > 16: + await message.reply('头衔太长了,咱设置不了') + return + if member.status == 'creator': + await message.reply('咱不能给群主设置头衔') + return + if not member.status in ['administrator','creator']: + await message.chat.promote(message.reply_to_message.from_user.id,can_manage_chat=True) + await message.chat.set_administrator_custom_title(message.reply_to_message.from_user.id,title) + await message.reply( + f'{message.from_user.mention_html()} 把 {message.reply_to_message.from_user.mention_html()} 变成了 {title}!', + parse_mode='HTML') + elif member.status == 'administrator' and member.can_be_edited: + await message.chat.set_administrator_custom_title(message.reply_to_message.from_user.id,title) + await message.reply( + f'{message.from_user.mention_html()} 把 {message.reply_to_message.from_user.mention_html()} 变成了 {title}!', + parse_mode='HTML') + else: + await message.reply('咱不能给这个人设置头衔,可能是因为ta已经被其它管理员设置了头衔') + return + except TelegramBadRequest as e: + await message.reply(f'因为咱没有添加新的管理员的权限,咱没办法设置头衔') + return + except Exception as e: + await message.reply(f'发生了错误: {str(e)}') + return +