feat: welcome the new users (disabled by default)

This commit is contained in:
草师傅 2025-10-12 12:18:18 +08:00
parent d06bc1f2c9
commit 2cd679f5ff
3 changed files with 37 additions and 1 deletions

View file

@ -6,7 +6,7 @@ from os import getenv
from aiogram import Bot, Dispatcher, Router from aiogram import Bot, Dispatcher, Router
from aiogram.client.default import DefaultBotProperties from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode 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.client.session.aiohttp import AiohttpSession
from aiogram import F from aiogram import F
@ -28,6 +28,7 @@ from core.stats import handle_stats_command
from core.middleware.stats import MessageStatsMiddleware from core.middleware.stats import MessageStatsMiddleware
from core.middleware.unpin import UnpinChannelMsgMiddleware from core.middleware.unpin import UnpinChannelMsgMiddleware
from core.rikki_hit import handle_query_hit_command from core.rikki_hit import handle_query_hit_command
from core.welcome import handle_tg_welcome
TOKEN = getenv("BOT_TOKEN") TOKEN = getenv("BOT_TOKEN")
@ -78,6 +79,8 @@ class TelegramAdapter:
# repeater 模块 # repeater 模块
repeater_router.message(F.chat.type.in_({'group', 'supergroup'}))(MessageRepeater().handle_message) 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) 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_baka)
# 在有更为妥当的方式检查命令触发者是不是原来的触发者之前先不启用 # 在有更为妥当的方式检查命令触发者是不是原来的触发者之前先不启用
#router.message(F.text == '雪豹闭嘴')(handle_self_delete) #router.message(F.text == '雪豹闭嘴')(handle_self_delete)

View file

@ -43,6 +43,10 @@ features:
unpin: unpin:
enable: true enable: true
regex: '' regex: ''
# 启用欢迎新成员
welcome:
enable: false
message: "嘤嘤嘤"
# group features settings # group features settings
# 群组 id使用 bot apibot 内置的 info 命令) # 群组 id使用 bot apibot 内置的 info 命令)

29
core/welcome.py Normal file
View file

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