调整内容

This commit is contained in:
liuwei
2025-08-13 17:49:26 +08:00
parent 07e2e35665
commit 8ed9b27429

View File

@@ -20,6 +20,7 @@ from utils.robot_cmd.robot_command import Feature, PermissionStatus
class LuckyPotRoom: class LuckyPotRoom:
"""奖池房间类""" """奖池房间类"""
def __init__(self, room_id: str, entry_fee: int, max_players: int, countdown: int, creator: str, group_id: str): def __init__(self, room_id: str, entry_fee: int, max_players: int, countdown: int, creator: str, group_id: str):
self.room_id = room_id self.room_id = room_id
self.status = "waiting" # waiting | drawing | finished self.status = "waiting" # waiting | drawing | finished
@@ -103,9 +104,16 @@ class LuckyPotPlugin(MessagePluginInterface):
return self._commands return self._commands
@property @property
def feature(self) -> Optional[Feature]: def feature_key(self) -> Optional[str]:
"""获取功能权限""" return self.FEATURE_KEY
return Feature.get_feature_by_key(self.FEATURE_KEY)
@property
def feature_description(self) -> Optional[str]:
return self.FEATURE_DESCRIPTION
def __init__(self):
super().__init__()
self.feature = self.register_feature()
def initialize(self, context: Dict[str, Any]) -> bool: def initialize(self, context: Dict[str, Any]) -> bool:
"""初始化插件""" """初始化插件"""
@@ -202,11 +210,11 @@ class LuckyPotPlugin(MessagePluginInterface):
room = self.active_rooms[roomid] room = self.active_rooms[roomid]
if room.status == "waiting": if room.status == "waiting":
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
f"⚠️ 已有一个活跃的大奖池房间正在等待中!\n" f"⚠️ 已有一个活跃的大奖池房间正在等待中!\n"
f"🕒 剩余时间: {room.get_remaining_time()}\n" f"🕒 剩余时间: {room.get_remaining_time()}\n"
f"👥 当前人数: {room.get_player_count()}/{room.max_players}\n" f"👥 当前人数: {room.get_player_count()}/{room.max_players}\n"
f"💰 当前奖池: {room.get_total_pot()} 积分", f"💰 当前奖池: {room.get_total_pot()} 积分",
sender) sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "已有活跃房间" return True, "已有活跃房间"
@@ -214,8 +222,8 @@ class LuckyPotPlugin(MessagePluginInterface):
user_points = self.points_db.get_user_points(sender, roomid) user_points = self.points_db.get_user_points(sender, roomid)
if user_points["total_points"] < self.entry_fee: if user_points["total_points"] < self.entry_fee:
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
f"❌ 积分不足!创建大奖池需要 {self.entry_fee} 积分,您当前只有 {user_points['total_points']} 积分。", f"❌ 积分不足!创建大奖池需要 {self.entry_fee} 积分,您当前只有 {user_points['total_points']} 积分。",
sender) sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "积分不足" return True, "积分不足"
@@ -241,7 +249,9 @@ class LuckyPotPlugin(MessagePluginInterface):
) )
if not deduct_success: if not deduct_success:
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, "❌ 扣除积分失败,无法创建大奖池!", sender) client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
"❌ 扣除积分失败,无法创建大奖池!",
sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "扣除积分失败" return True, "扣除积分失败"
@@ -253,13 +263,13 @@ class LuckyPotPlugin(MessagePluginInterface):
# 发送创建成功消息 # 发送创建成功消息
await self.bot.send_text_message(target, await self.bot.send_text_message(target,
f"🎯 大奖池已创建!\n" f"🎯 大奖池已创建!\n"
f"🆔 房间ID: {room_id}\n" f"🆔 房间ID: {room_id}\n"
f"💰 入场费: {self.entry_fee} 积分\n" f"💰 入场费: {self.entry_fee} 积分\n"
f"👥 人数上限: {self.max_players}\n" f"👥 人数上限: {self.max_players}\n"
f"⏳ 倒计时: {self.countdown}\n" f"⏳ 倒计时: {self.countdown}\n"
f"\n🎮 发送 \"{self._commands[0]} 参与\" 加入游戏!", f"\n🎮 发送 \"{self._commands[0]} 参与\" 加入游戏!",
sender) sender)
return True, "创建房间成功" return True, "创建房间成功"
@@ -272,8 +282,8 @@ class LuckyPotPlugin(MessagePluginInterface):
# 检查是否有活跃房间 # 检查是否有活跃房间
if roomid not in self.active_rooms: if roomid not in self.active_rooms:
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
f"❌ 当前没有活跃的大奖池房间!\n发送 \"{self._commands[0]} 创建\" 创建一个新的大奖池。", f"❌ 当前没有活跃的大奖池房间!\n发送 \"{self._commands[0]} 创建\" 创建一个新的大奖池。",
sender) sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "没有活跃房间" return True, "没有活跃房间"
@@ -281,19 +291,25 @@ class LuckyPotPlugin(MessagePluginInterface):
# 检查房间状态 # 检查房间状态
if room.status != "waiting": if room.status != "waiting":
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, "❌ 当前房间已经开始开奖或已结束,无法加入!", sender) client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
"❌ 当前房间已经开始开奖或已结束,无法加入!",
sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "房间状态不允许加入" return True, "房间状态不允许加入"
# 检查是否已在房间中 # 检查是否已在房间中
if sender in room.players: if sender in room.players:
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, "⚠️ 您已经在大奖池中了,无需重复加入!", sender) client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
"⚠️ 您已经在大奖池中了,无需重复加入!",
sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "已在房间中" return True, "已在房间中"
# 检查房间是否已满 # 检查房间是否已满
if room.is_full(): if room.is_full():
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, "❌ 大奖池已满员,无法加入!", sender) client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
"❌ 大奖池已满员,无法加入!",
sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "房间已满" return True, "房间已满"
@@ -303,8 +319,8 @@ class LuckyPotPlugin(MessagePluginInterface):
if time.time() - last_join_time < self.cooldown: if time.time() - last_join_time < self.cooldown:
remaining = int(self.cooldown - (time.time() - last_join_time)) remaining = int(self.cooldown - (time.time() - last_join_time))
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
f"⏳ 操作过于频繁,请等待 {remaining} 秒后再试!", f"⏳ 操作过于频繁,请等待 {remaining} 秒后再试!",
sender) sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "冷却中" return True, "冷却中"
@@ -312,8 +328,8 @@ class LuckyPotPlugin(MessagePluginInterface):
user_points = self.points_db.get_user_points(sender, roomid) user_points = self.points_db.get_user_points(sender, roomid)
if user_points["total_points"] < room.entry_fee: if user_points["total_points"] < room.entry_fee:
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
f"❌ 积分不足!参与大奖池需要 {room.entry_fee} 积分,您当前只有 {user_points['total_points']} 积分。", f"❌ 积分不足!参与大奖池需要 {room.entry_fee} 积分,您当前只有 {user_points['total_points']} 积分。",
sender) sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "积分不足" return True, "积分不足"
@@ -324,7 +340,9 @@ class LuckyPotPlugin(MessagePluginInterface):
) )
if not deduct_success: if not deduct_success:
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, "❌ 扣除积分失败,无法加入大奖池!", sender) client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
"❌ 扣除积分失败,无法加入大奖池!",
sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "扣除积分失败" return True, "扣除积分失败"
@@ -339,11 +357,11 @@ class LuckyPotPlugin(MessagePluginInterface):
# 发送加入成功消息 # 发送加入成功消息
await self.bot.send_text_message(target, await self.bot.send_text_message(target,
f"{nickname} 成功加入大奖池!\n" f"{nickname} 成功加入大奖池!\n"
f"👥 当前人数: {room.get_player_count()}/{room.max_players}\n" f"👥 当前人数: {room.get_player_count()}/{room.max_players}\n"
f"💰 当前奖池: {room.get_total_pot()} 积分\n" f"💰 当前奖池: {room.get_total_pot()} 积分\n"
f"⏳ 剩余时间: {room.get_remaining_time()}", f"⏳ 剩余时间: {room.get_remaining_time()}",
sender) sender)
# 如果房间已满,立即开奖 # 如果房间已满,立即开奖
if room.is_full(): if room.is_full():
@@ -361,8 +379,8 @@ class LuckyPotPlugin(MessagePluginInterface):
# 检查是否有活跃房间 # 检查是否有活跃房间
if roomid not in self.active_rooms: if roomid not in self.active_rooms:
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
f"❌ 当前没有活跃的大奖池房间!\n发送 \"{self._commands[0]} 创建\" 创建一个新的大奖池。", f"❌ 当前没有活跃的大奖池房间!\n发送 \"{self._commands[0]} 创建\" 创建一个新的大奖池。",
sender) sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "没有活跃房间" return True, "没有活跃房间"
@@ -372,14 +390,14 @@ class LuckyPotPlugin(MessagePluginInterface):
if room.status == "waiting": if room.status == "waiting":
player_list = "\n".join([f"👤 {room.player_nicknames[p]}" for p in room.players]) player_list = "\n".join([f"👤 {room.player_nicknames[p]}" for p in room.players])
await self.bot.send_text_message(target, await self.bot.send_text_message(target,
f"🎯 大奖池状态: 等待中\n" f"🎯 大奖池状态: 等待中\n"
f"🆔 房间ID: {room.room_id}\n" f"🆔 房间ID: {room.room_id}\n"
f"💰 入场费: {room.entry_fee} 积分\n" f"💰 入场费: {room.entry_fee} 积分\n"
f"👥 当前人数: {room.get_player_count()}/{room.max_players}\n" f"👥 当前人数: {room.get_player_count()}/{room.max_players}\n"
f"💰 当前奖池: {room.get_total_pot()} 积分\n" f"💰 当前奖池: {room.get_total_pot()} 积分\n"
f"⏳ 剩余时间: {room.get_remaining_time()}\n\n" f"⏳ 剩余时间: {room.get_remaining_time()}\n\n"
f"参与玩家:\n{player_list}", f"参与玩家:\n{player_list}",
sender) sender)
elif room.status == "drawing": elif room.status == "drawing":
await self.bot.send_text_message(target, "🎯 大奖池正在开奖中,请稍候...", sender) await self.bot.send_text_message(target, "🎯 大奖池正在开奖中,请稍候...", sender)
elif room.status == "finished" and room.result: elif room.status == "finished" and room.result:
@@ -397,7 +415,9 @@ class LuckyPotPlugin(MessagePluginInterface):
# 检查是否有活跃房间 # 检查是否有活跃房间
if roomid not in self.active_rooms: if roomid not in self.active_rooms:
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, "❌ 当前没有活跃的大奖池房间!", sender) client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
"❌ 当前没有活跃的大奖池房间!",
sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "没有活跃房间" return True, "没有活跃房间"
@@ -405,13 +425,17 @@ class LuckyPotPlugin(MessagePluginInterface):
# 检查是否是创建者 # 检查是否是创建者
if room.creator != sender: if room.creator != sender:
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, "❌ 只有房间创建者才能取消大奖池!", sender) client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
"❌ 只有房间创建者才能取消大奖池!",
sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "不是创建者" return True, "不是创建者"
# 检查房间状态 # 检查房间状态
if room.status != "waiting": if room.status != "waiting":
client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target, "❌ 房间已经开始开奖或已结束,无法取消!", sender) client_msg_id, create_time, new_msg_id = await self.bot.send_text_message(target,
"❌ 房间已经开始开奖或已结束,无法取消!",
sender)
self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5) self.revoke.add_message_to_revoke(target, client_msg_id, create_time, new_msg_id, 5)
return True, "房间状态不允许取消" return True, "房间状态不允许取消"
@@ -430,8 +454,8 @@ class LuckyPotPlugin(MessagePluginInterface):
# 发送取消成功消息 # 发送取消成功消息
await self.bot.send_text_message(target, await self.bot.send_text_message(target,
f"🚫 大奖池已被创建者取消!\n所有玩家的积分已退还。", f"🚫 大奖池已被创建者取消!\n所有玩家的积分已退还。",
sender) sender)
return True, "取消房间成功" return True, "取消房间成功"
@@ -483,8 +507,8 @@ class LuckyPotPlugin(MessagePluginInterface):
# 发送开奖提示 # 发送开奖提示
target = room.group_id if room.group_id else room.creator target = room.group_id if room.group_id else room.creator
await self.bot.send_text_message(target, await self.bot.send_text_message(target,
f"🧧 大奖池开奖中...\n💥💥💥", f"🧧 大奖池开奖中...\n💥💥💥",
room.creator) room.creator)
# 等待一小段时间,增加悬念 # 等待一小段时间,增加悬念
await asyncio.sleep(2) await asyncio.sleep(2)