diff --git a/adapters/tg.py b/adapters/tg.py index d904878..bb2afb9 100644 --- a/adapters/tg.py +++ b/adapters/tg.py @@ -6,7 +6,7 @@ from os import getenv from aiogram import Bot, Dispatcher, Router from aiogram.client.default import DefaultBotProperties from aiogram.enums import ParseMode -from aiogram.filters import CommandStart, Command +from aiogram.filters import CommandStart, Command, IS_NOT_MEMBER, IS_MEMBER, ChatMemberUpdatedFilter from aiogram.client.session.aiohttp import AiohttpSession from aiogram import F @@ -28,6 +28,7 @@ from core.stats import handle_stats_command from core.middleware.stats import MessageStatsMiddleware from core.middleware.unpin import UnpinChannelMsgMiddleware from core.rikki_hit import handle_query_hit_command +from core.welcome import handle_tg_welcome TOKEN = getenv("BOT_TOKEN") @@ -78,6 +79,8 @@ class TelegramAdapter: # repeater 模块 repeater_router.message(F.chat.type.in_({'group', 'supergroup'}))(MessageRepeater().handle_message) router.message(F.text.regexp(r'(n|N) ?网尾号 ?[0-9]*'))(handle_nexusmods_id) + # welcome 模块 + router.chat_member(ChatMemberUpdatedFilter(IS_NOT_MEMBER >> IS_MEMBER))(handle_tg_welcome) router.message(F.text == '我是笨蛋')(handle_baka) # 在有更为妥当的方式检查命令触发者是不是原来的触发者之前先不启用 #router.message(F.text == '雪豹闭嘴')(handle_self_delete) diff --git a/config.example.yaml b/config.example.yaml index 17242bd..907f53f 100644 --- a/config.example.yaml +++ b/config.example.yaml @@ -43,6 +43,10 @@ features: unpin: enable: true regex: '' + # 启用欢迎新成员 + welcome: + enable: false + message: "嘤嘤嘤" # group features settings # 群组 id,使用 bot api(bot 内置的 info 命令) diff --git a/core/welcome.py b/core/welcome.py new file mode 100644 index 0000000..ab80843 --- /dev/null +++ b/core/welcome.py @@ -0,0 +1,29 @@ +import logging + +from aiogram.enums import ChatMemberStatus +from aiogram.types import ChatMemberUpdated + +from config import config + + +async def get_welcome_message(chat_id: int) -> str | None: + if chat_id is None: + return None + elif not config.is_feature_enabled('welcome', chat_id): + logging.debug(f"收到了欢迎事件,但是 welcome 功能未启用,跳过处理") + return None + # 根据 chat_id 获取不同的欢迎消息 + return config.get_feature_config('welcome', chat_id)['message'] + + +async def handle_tg_welcome(event: ChatMemberUpdated): + """ + 处理用户加入群组的事件,发送欢迎消息 + """ + try: + if event.new_chat_member.status == ChatMemberStatus.MEMBER: + welcome_message = await get_welcome_message(event.chat.id) + if welcome_message: + await event.answer(welcome_message) + except Exception as e: + logging.error(f"Error in handle_tg_welcome: {e}") \ No newline at end of file