Files
Bubbles/function/func_goblin_gift.py
2025-04-23 13:30:10 +08:00

102 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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}")