From dcaaddc42affe7a43e8d3396ec2856d785bd4dc7 Mon Sep 17 00:00:00 2001 From: Bakadax Date: Tue, 29 Apr 2025 19:01:37 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E8=A1=A8=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/emoji_system/emoji_manager.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/plugins/emoji_system/emoji_manager.py b/src/plugins/emoji_system/emoji_manager.py index 5baddb771..42ae6ed07 100644 --- a/src/plugins/emoji_system/emoji_manager.py +++ b/src/plugins/emoji_system/emoji_manager.py @@ -601,8 +601,24 @@ class EmojiManager: 返回: list[str]: 可读的表情包信息字符串列表 """ + # 按使用次数升序排序表情包对象 + sorted_emojis = sorted(emoji_objects, key=lambda emoji: emoji.usage_count) + + # 使用概率分布选择20个表情包 + selected_emojis = [] + while len(selected_emojis) < 20 and sorted_emojis: + for emoji in sorted_emojis: + # 计算选择该表情包的概率,使用次数越少概率越大 + probability = 1 / (emoji.usage_count + 1) + if random.random() < probability: + selected_emojis.append(emoji) + if len(selected_emojis) == 20: + break + # 从排序列表中移除已选择的表情包 + sorted_emojis = [emoji for emoji in sorted_emojis if emoji not in selected_emojis] + emoji_info_list = [] - for i, emoji in enumerate(emoji_objects): + for i, emoji in enumerate(selected_emojis): # 转换时间戳为可读时间 time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(emoji.register_time)) # 构建每个表情包的信息字符串 @@ -779,6 +795,7 @@ class EmojiManager: if not replaced: logger.error("[错误] 替换表情包失败,无法完成注册") return False + return True else: # 修复:等待异步注册完成 register_success = await new_emoji.register_to_db() From 6d6bd6922fbbb62fef622737235522821bb05b46 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 29 Apr 2025 11:04:47 +0000 Subject: [PATCH 2/8] =?UTF-8?q?=F0=9F=A4=96=20=E8=87=AA=E5=8A=A8=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81=20[skip=20ci]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/emoji_system/emoji_manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/emoji_system/emoji_manager.py b/src/plugins/emoji_system/emoji_manager.py index 42ae6ed07..fcbed8884 100644 --- a/src/plugins/emoji_system/emoji_manager.py +++ b/src/plugins/emoji_system/emoji_manager.py @@ -603,7 +603,7 @@ class EmojiManager: """ # 按使用次数升序排序表情包对象 sorted_emojis = sorted(emoji_objects, key=lambda emoji: emoji.usage_count) - + # 使用概率分布选择20个表情包 selected_emojis = [] while len(selected_emojis) < 20 and sorted_emojis: @@ -616,7 +616,7 @@ class EmojiManager: break # 从排序列表中移除已选择的表情包 sorted_emojis = [emoji for emoji in sorted_emojis if emoji not in selected_emojis] - + emoji_info_list = [] for i, emoji in enumerate(selected_emojis): # 转换时间戳为可读时间 From d38943155be052918be705197e49cec2c71a1bfa Mon Sep 17 00:00:00 2001 From: Bakadax Date: Tue, 29 Apr 2025 19:17:01 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E8=A1=A8=E6=83=85=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/emoji_system/emoji_manager.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/plugins/emoji_system/emoji_manager.py b/src/plugins/emoji_system/emoji_manager.py index 42ae6ed07..b23f99125 100644 --- a/src/plugins/emoji_system/emoji_manager.py +++ b/src/plugins/emoji_system/emoji_manager.py @@ -601,13 +601,10 @@ class EmojiManager: 返回: list[str]: 可读的表情包信息字符串列表 """ - # 按使用次数升序排序表情包对象 - sorted_emojis = sorted(emoji_objects, key=lambda emoji: emoji.usage_count) - # 使用概率分布选择20个表情包 selected_emojis = [] - while len(selected_emojis) < 20 and sorted_emojis: - for emoji in sorted_emojis: + while len(selected_emojis) < 20 and emoji_objects: + for emoji in emoji_objects: # 计算选择该表情包的概率,使用次数越少概率越大 probability = 1 / (emoji.usage_count + 1) if random.random() < probability: @@ -615,7 +612,7 @@ class EmojiManager: if len(selected_emojis) == 20: break # 从排序列表中移除已选择的表情包 - sorted_emojis = [emoji for emoji in sorted_emojis if emoji not in selected_emojis] + emoji_objects = [emoji for emoji in emoji_objects if emoji not in selected_emojis] emoji_info_list = [] for i, emoji in enumerate(selected_emojis): @@ -642,9 +639,9 @@ class EmojiManager: # 获取所有表情包对象 all_emojis = self.emoji_objects - + sorted_emojis = sorted(all_emojis, key=lambda emoji: emoji.usage_count) # 将表情包信息转换为可读的字符串 - emoji_info_list = self._emoji_objects_to_readable_list(all_emojis) + emoji_info_list = self._emoji_objects_to_readable_list(sorted_emojis) # 构建提示词 prompt = ( @@ -674,9 +671,9 @@ class EmojiManager: emoji_index = int(match.group(1)) - 1 # 转换为0-based索引 # 检查索引是否有效 - if 0 <= emoji_index < len(all_emojis): - emoji_to_delete = all_emojis[emoji_index] - + if 0 <= emoji_index < len(sorted_emojis): + emoji_to_delete = sorted_emojis[emoji_index] + print(emoji_to_delete.hash) # 删除选定的表情包 logger.info(f"[决策] 决定删除表情包: {emoji_to_delete.description}") delete_success = await self.delete_emoji(emoji_to_delete.hash) From 3a4c819cf3b7a425e41e85035e7bf675e6d9e7e0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 29 Apr 2025 11:18:08 +0000 Subject: [PATCH 4/8] =?UTF-8?q?=F0=9F=A4=96=20=E8=87=AA=E5=8A=A8=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81=20[skip=20ci]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/emoji_system/emoji_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/emoji_system/emoji_manager.py b/src/plugins/emoji_system/emoji_manager.py index b23f99125..47f931ffd 100644 --- a/src/plugins/emoji_system/emoji_manager.py +++ b/src/plugins/emoji_system/emoji_manager.py @@ -613,7 +613,7 @@ class EmojiManager: break # 从排序列表中移除已选择的表情包 emoji_objects = [emoji for emoji in emoji_objects if emoji not in selected_emojis] - + emoji_info_list = [] for i, emoji in enumerate(selected_emojis): # 转换时间戳为可读时间 From b67694f395d1fc288fd705e77a2efe60ec9a6a10 Mon Sep 17 00:00:00 2001 From: Bakadax Date: Tue, 29 Apr 2025 19:28:14 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E5=88=A0=E6=8E=89=E6=B2=A1=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/emoji_system/emoji_manager.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/plugins/emoji_system/emoji_manager.py b/src/plugins/emoji_system/emoji_manager.py index 47f931ffd..7d968cc24 100644 --- a/src/plugins/emoji_system/emoji_manager.py +++ b/src/plugins/emoji_system/emoji_manager.py @@ -611,8 +611,6 @@ class EmojiManager: selected_emojis.append(emoji) if len(selected_emojis) == 20: break - # 从排序列表中移除已选择的表情包 - emoji_objects = [emoji for emoji in emoji_objects if emoji not in selected_emojis] emoji_info_list = [] for i, emoji in enumerate(selected_emojis): @@ -673,7 +671,7 @@ class EmojiManager: # 检查索引是否有效 if 0 <= emoji_index < len(sorted_emojis): emoji_to_delete = sorted_emojis[emoji_index] - print(emoji_to_delete.hash) + # 删除选定的表情包 logger.info(f"[决策] 决定删除表情包: {emoji_to_delete.description}") delete_success = await self.delete_emoji(emoji_to_delete.hash) From a3c43353f32fca4e0734b978cc2f0a34606d8f9e Mon Sep 17 00:00:00 2001 From: Bakadax Date: Tue, 29 Apr 2025 19:34:44 +0800 Subject: [PATCH 6/8] =?UTF-8?q?ai=E5=93=A5=E5=A4=AApro=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/emoji_system/emoji_manager.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/plugins/emoji_system/emoji_manager.py b/src/plugins/emoji_system/emoji_manager.py index 7d968cc24..8782bd565 100644 --- a/src/plugins/emoji_system/emoji_manager.py +++ b/src/plugins/emoji_system/emoji_manager.py @@ -601,16 +601,14 @@ class EmojiManager: 返回: list[str]: 可读的表情包信息字符串列表 """ - # 使用概率分布选择20个表情包 - selected_emojis = [] - while len(selected_emojis) < 20 and emoji_objects: - for emoji in emoji_objects: - # 计算选择该表情包的概率,使用次数越少概率越大 - probability = 1 / (emoji.usage_count + 1) - if random.random() < probability: - selected_emojis.append(emoji) - if len(selected_emojis) == 20: - break + # 计算每个表情包的选择概率 + 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 = [] for i, emoji in enumerate(selected_emojis): @@ -636,8 +634,7 @@ class EmojiManager: self._ensure_db() # 获取所有表情包对象 - all_emojis = self.emoji_objects - sorted_emojis = sorted(all_emojis, key=lambda emoji: emoji.usage_count) + sorted_emojis = sorted(self.emoji_objects, key=lambda emoji: emoji.usage_count) # 将表情包信息转换为可读的字符串 emoji_info_list = self._emoji_objects_to_readable_list(sorted_emojis) From 993b1f452dc53452732d56dc2762df18055155dd Mon Sep 17 00:00:00 2001 From: Bakadax Date: Tue, 29 Apr 2025 19:49:29 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E6=8A=8A=E5=8F=96=E5=80=BC=E7=9A=84?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=94=BE=E5=88=B0=E6=AD=A3=E7=A1=AE=E7=9A=84?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/emoji_system/emoji_manager.py | 28 +++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/plugins/emoji_system/emoji_manager.py b/src/plugins/emoji_system/emoji_manager.py index 8782bd565..7f1af5574 100644 --- a/src/plugins/emoji_system/emoji_manager.py +++ b/src/plugins/emoji_system/emoji_manager.py @@ -601,17 +601,8 @@ class EmojiManager: 返回: list[str]: 可读的表情包信息字符串列表 """ - # 计算每个表情包的选择概率 - 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 = [] - for i, emoji in enumerate(selected_emojis): + for i, emoji in enumerate(emoji_objects): # 转换时间戳为可读时间 time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(emoji.register_time)) # 构建每个表情包的信息字符串 @@ -634,9 +625,18 @@ class EmojiManager: self._ensure_db() # 获取所有表情包对象 - sorted_emojis = sorted(self.emoji_objects, key=lambda emoji: emoji.usage_count) + 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(sorted_emojis) + emoji_info_list = self._emoji_objects_to_readable_list(selected_emojis) # 构建提示词 prompt = ( @@ -666,8 +666,8 @@ class EmojiManager: emoji_index = int(match.group(1)) - 1 # 转换为0-based索引 # 检查索引是否有效 - if 0 <= emoji_index < len(sorted_emojis): - emoji_to_delete = sorted_emojis[emoji_index] + if 0 <= emoji_index < len(selected_emojis): + emoji_to_delete = selected_emojis[emoji_index] # 删除选定的表情包 logger.info(f"[决策] 决定删除表情包: {emoji_to_delete.description}") From d659f37ea40aabdbc7682df4d3e69494b0714559 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 29 Apr 2025 11:49:52 +0000 Subject: [PATCH 8/8] =?UTF-8?q?=F0=9F=A4=96=20=E8=87=AA=E5=8A=A8=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81=20[skip=20ci]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/emoji_system/emoji_manager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/emoji_system/emoji_manager.py b/src/plugins/emoji_system/emoji_manager.py index 7f1af5574..211a4a835 100644 --- a/src/plugins/emoji_system/emoji_manager.py +++ b/src/plugins/emoji_system/emoji_manager.py @@ -633,7 +633,9 @@ class EmojiManager: 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))) + selected_emojis = random.choices( + emoji_objects, weights=normalized_probabilities, k=min(20, len(emoji_objects)) + ) # 将表情包信息转换为可读的字符串 emoji_info_list = self._emoji_objects_to_readable_list(selected_emojis)