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
+