This commit is contained in:
SengokuCola
2025-04-29 19:58:14 +08:00

View File

@@ -625,10 +625,20 @@ class EmojiManager:
self._ensure_db() self._ensure_db()
# 获取所有表情包对象 # 获取所有表情包对象
all_emojis = self.emoji_objects emoji_objects = self.emoji_objects
# 计算每个表情包的选择概率
probabilities = [1 / (emoji.usage_count + 1) for emoji in emoji_objects]
# 归一化概率确保总和为1
total_probability = sum(probabilities)
normalized_probabilities = [p / total_probability for p in probabilities]
# 使用概率分布选择最多20个表情包
selected_emojis = random.choices(
emoji_objects, weights=normalized_probabilities, k=min(20, len(emoji_objects))
)
# 将表情包信息转换为可读的字符串 # 将表情包信息转换为可读的字符串
emoji_info_list = self._emoji_objects_to_readable_list(all_emojis) emoji_info_list = self._emoji_objects_to_readable_list(selected_emojis)
# 构建提示词 # 构建提示词
prompt = ( prompt = (
@@ -658,8 +668,8 @@ class EmojiManager:
emoji_index = int(match.group(1)) - 1 # 转换为0-based索引 emoji_index = int(match.group(1)) - 1 # 转换为0-based索引
# 检查索引是否有效 # 检查索引是否有效
if 0 <= emoji_index < len(all_emojis): if 0 <= emoji_index < len(selected_emojis):
emoji_to_delete = all_emojis[emoji_index] emoji_to_delete = selected_emojis[emoji_index]
# 删除选定的表情包 # 删除选定的表情包
logger.info(f"[决策] 决定删除表情包: {emoji_to_delete.description}") logger.info(f"[决策] 决定删除表情包: {emoji_to_delete.description}")
@@ -779,6 +789,7 @@ class EmojiManager:
if not replaced: if not replaced:
logger.error("[错误] 替换表情包失败,无法完成注册") logger.error("[错误] 替换表情包失败,无法完成注册")
return False return False
return True
else: else:
# 修复:等待异步注册完成 # 修复:等待异步注册完成
register_success = await new_emoji.register_to_db() register_success = await new_emoji.register_to_db()