移除古灵阁妖精馈赠相关功能,更新配置文件和命令处理逻辑,确保代码结构更加简洁,提升可维护性。

This commit is contained in:
Zylan
2025-04-24 01:23:20 +08:00
parent 6dd0f55943
commit 4799a2bce8
7 changed files with 300 additions and 541 deletions

View File

@@ -1,102 +0,0 @@
import random
from typing import TYPE_CHECKING, Callable, Any
from wcferry import WxMsg
from function.func_duel import DuelRankSystem
if TYPE_CHECKING:
from logging import Logger
from wcferry import Wcf
from typing import Dict
class GoblinGiftManager:
"""管理古灵阁妖精的馈赠事件"""
def __init__(self, config: Any, wcf: 'Wcf', log: 'Logger', send_text_msg: Callable):
"""初始化馈赠管理器
Args:
config: 配置对象包含GOBLIN_GIFT配置项
wcf: WCF实例用于获取群聊昵称等信息
log: 日志记录器
send_text_msg: 发送文本消息的函数
"""
self.config = config
self.wcf = wcf
self.LOG = log
self.sendTextMsg = send_text_msg
def try_trigger(self, msg: WxMsg) -> None:
"""尝试触发古灵阁妖精的馈赠事件
Args:
msg: 微信消息对象
"""
# 检查配置是否存在
if not hasattr(self.config, 'GOBLIN_GIFT'):
return
# 检查全局开关
if not self.config.GOBLIN_GIFT.get('enable', False):
return
# 检查群聊白名单
allowed_groups = self.config.GOBLIN_GIFT.get('allowed_groups', [])
if not allowed_groups or msg.roomid not in allowed_groups:
return
# 只在群聊中才触发
if not msg.from_group():
return
# 获取触发概率默认1%
probability = self.config.GOBLIN_GIFT.get('probability', 0.01)
# 按概率触发
if random.random() < probability:
try:
# 获取玩家昵称
player_name = self.wcf.get_alias_in_chatroom(msg.sender, msg.roomid)
if not player_name:
player_name = msg.sender # 如果获取不到昵称用wxid代替
# 初始化对应群聊的积分系统
rank_system = DuelRankSystem(group_id=msg.roomid)
# 获取配置的积分范围默认10-100
min_points = self.config.GOBLIN_GIFT.get('min_points', 10)
max_points = self.config.GOBLIN_GIFT.get('max_points', 100)
# 随机增加积分
points_added = random.randint(min_points, max_points)
# 更新玩家数据
player_data = rank_system.get_player_data(player_name)
player_data['score'] += points_added
# 保存数据
rank_system._save_ranks()
# 准备随机馈赠消息
gift_sources = [
f"✨ 一只迷路的家养小精灵往 {player_name} 口袋里塞了什么东西!",
f"💰 古灵阁的妖精似乎格外青睐 {player_name},留下了一袋金加隆(折合积分)!",
f"🦉 一只送信的猫头鹰丢错了包裹,{player_name} 意外发现了一笔“意外之财”!",
f"🍀 {player_name} 踩到了一株幸运四叶草,好运带来了额外的积分!",
f"🍄 在禁林的边缘,{player_name} 发现了一簇闪闪发光的魔法蘑菇!",
f"{player_name} 捡到了一个有求必应屋掉出来的神秘物品!",
f"🔮 временами удача улыбается {player_name}!", # 偶尔来点不一样的语言增加神秘感
f"🎉 费尔奇打瞌睡时掉了一小袋没收来的积分,刚好被 {player_name} 捡到!",
f"📜 一张古老的藏宝图碎片指引 {player_name} 找到了一些失落的积分!",
f"🧙‍♂️ 邓布利多教授对 {player_name} 的行为表示赞赏,特批“为学院加分”!",
f"🧪 {player_name} 的魔药课作业获得了斯拉格霍恩教授的额外加分!",
f"🌟 一颗流星划过霍格沃茨上空,{player_name} 许下的愿望成真了!"
]
gift_message = random.choice(gift_sources)
final_message = f"{gift_message}\n获得积分: +{points_added} 分!"
# 发送馈赠通知 (@发送者)
self.sendTextMsg(final_message, msg.roomid, msg.sender)
self.LOG.info(f"古灵阁馈赠触发: 群 {msg.roomid}, 用户 {player_name}, 获得 {points_added} 积分")
except Exception as e:
self.LOG.error(f"触发古灵阁馈赠时出错: {e}")

View File

@@ -102,7 +102,6 @@ def handle_insult_request(
logger,
bot_wxid: str,
send_text_func: Callable[[str, str, Optional[str]], None],
trigger_goblin_gift_func: Callable[[object], None],
msg,
target_mention_name: str
) -> bool:
@@ -114,7 +113,6 @@ def handle_insult_request(
logger: 日志记录器。
bot_wxid: 机器人自身的 wxid。
send_text_func: 发送文本消息的函数 (content, receiver, at_list=None)。
trigger_goblin_gift_func: 触发哥布林馈赠的函数。
msg: 原始消息对象 (需要 .roomid 属性)。
target_mention_name: 从消息中提取的被@用户的名称。
@@ -154,9 +152,6 @@ def handle_insult_request(
send_text_func(insult_text, msg.roomid)
logger.info(f"已发送骂人消息至群 {msg.roomid},目标: {actual_target_name}")
if trigger_goblin_gift_func:
trigger_goblin_gift_func(msg)
except Exception as e:
logger.error(f"生成或发送骂人消息时出错: {e}")
send_text_func("呃,我想骂但出错了...", msg.roomid)