refactor(utils): 移除自定义加权随机函数并改用 random.choices
将原先在 `bot.py` 中实现的 `weighted_choice` 函数移除,并在 `src/main.py` 中改用 Python 内置的 `random.choices` 函数来实现启动时彩蛋的加权随机选择。 这一更改简化了代码,提高了可读性,并利用了标准库的优化实现。同时调整了彩蛋文本和对应的权重。
This commit is contained in:
43
bot.py
43
bot.py
@@ -25,8 +25,6 @@ initialize_logging()
|
|||||||
from src.main import MainSystem #noqa
|
from src.main import MainSystem #noqa
|
||||||
from src.manager.async_task_manager import async_task_manager #noqa
|
from src.manager.async_task_manager import async_task_manager #noqa
|
||||||
from colorama import init, Fore
|
from colorama import init, Fore
|
||||||
import random
|
|
||||||
from typing import List, Sequence, Optional
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -65,49 +63,10 @@ async def request_shutdown() -> bool:
|
|||||||
logger.error(f"请求关闭程序时发生错误: {e}")
|
logger.error(f"请求关闭程序时发生错误: {e}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def weighted_choice(data: Sequence[str],
|
|
||||||
weights: Optional[List[float]] = None) -> str:
|
|
||||||
"""
|
|
||||||
从 data 中按权重随机返回一条。
|
|
||||||
若 weights 为 None,则所有元素权重默认为 1。
|
|
||||||
"""
|
|
||||||
if weights is None:
|
|
||||||
weights = [1.0] * len(data)
|
|
||||||
|
|
||||||
if len(data) != len(weights):
|
|
||||||
raise ValueError("data 和 weights 长度必须相等")
|
|
||||||
|
|
||||||
# 计算累计权重区间
|
|
||||||
total = 0.0
|
|
||||||
acc = []
|
|
||||||
for w in weights:
|
|
||||||
total += w
|
|
||||||
acc.append(total)
|
|
||||||
|
|
||||||
if total <= 0:
|
|
||||||
raise ValueError("总权重必须大于 0")
|
|
||||||
|
|
||||||
# 随机落点
|
|
||||||
r = random.random() * total
|
|
||||||
# 二分查找落点所在的区间
|
|
||||||
left, right = 0, len(acc) - 1
|
|
||||||
while left < right:
|
|
||||||
mid = (left + right) // 2
|
|
||||||
if r < acc[mid]:
|
|
||||||
right = mid
|
|
||||||
else:
|
|
||||||
left = mid + 1
|
|
||||||
return data[left]
|
|
||||||
|
|
||||||
def easter_egg():
|
def easter_egg():
|
||||||
# 彩蛋
|
# 彩蛋
|
||||||
init()
|
init()
|
||||||
items = ["多年以后,面对AI行刑队,张三将会回想起他2023年在会议上讨论人工智能的那个下午",
|
text = "多年以后,面对AI行刑队,张三将会回想起他2023年在会议上讨论人工智能的那个下午"
|
||||||
"你知道吗?诺狐的耳朵很软,很好rua",
|
|
||||||
"喵喵~你的麦麦被猫娘入侵了喵~",
|
|
||||||
"恭喜你触发了稀有彩蛋:诺狐嗷呜~ ~"]
|
|
||||||
w = [15, 6, 8, 0.0001]
|
|
||||||
text = weighted_choice(items, w)
|
|
||||||
rainbow_colors = [Fore.RED, Fore.YELLOW, Fore.GREEN, Fore.CYAN, Fore.BLUE, Fore.MAGENTA]
|
rainbow_colors = [Fore.RED, Fore.YELLOW, Fore.GREEN, Fore.CYAN, Fore.BLUE, Fore.MAGENTA]
|
||||||
rainbow_text = ""
|
rainbow_text = ""
|
||||||
for i, char in enumerate(text):
|
for i, char in enumerate(text):
|
||||||
|
|||||||
30
src/main.py
30
src/main.py
@@ -83,18 +83,26 @@ class MainSystem:
|
|||||||
# 其他初始化任务
|
# 其他初始化任务
|
||||||
await asyncio.gather(self._init_components())
|
await asyncio.gather(self._init_components())
|
||||||
phrases = [
|
phrases = [
|
||||||
"我们的代码里没有bug,只有‘特性’.",
|
("我们的代码里没有bug,只有‘特性’.", 10),
|
||||||
"你知道吗,雅诺狐的耳朵很好模",
|
("你知道吗,雅诺狐的耳朵很好模", 5),
|
||||||
"你群最高技术力——言柒姐姐!",
|
("你群最高技术力——言柒姐姐!", 20),
|
||||||
"初墨小姐宇宙第一(不是)",
|
("初墨小姐宇宙第一(不是)", 15),
|
||||||
"world.execute(me);",
|
("world.execute(me);", 10),
|
||||||
"正在尝试连接到MaiBot的服务器...连接失败,正在转接到maimaiDX",
|
("正在尝试连接到MaiBot的服务器...连接失败,正在转接到maimaiDX", 10),
|
||||||
"你的bug就像星星一样多,而我的代码像太阳一样,一出来就看不见了。",
|
("你的bug就像星星一样多,而我的代码像太阳一样,一出来就看不见了。", 10),
|
||||||
"温馨提示:请不要在代码中留下任何魔法数字,除非你知道它的含义。",
|
("温馨提示:请不要在代码中留下任何魔法数字,除非你知道它的含义。", 10),
|
||||||
"世界上有10种人:懂二进制的和不懂的。"
|
("世界上有10种人:懂二进制的和不懂的。", 10),
|
||||||
|
("喵喵~你的麦麦被猫娘入侵了喵~", 5),
|
||||||
|
("恭喜你触发了稀有彩蛋:诺狐嗷呜~ ~", 1)
|
||||||
]
|
]
|
||||||
from random import choice
|
from random import choices
|
||||||
eggs = choice(phrases)
|
|
||||||
|
# 分离彩蛋和权重
|
||||||
|
egg_texts, weights = zip(*phrases)
|
||||||
|
|
||||||
|
# 使用choices进行带权重的随机选择
|
||||||
|
selected_egg = choices(egg_texts, weights=weights, k=1)
|
||||||
|
eggs = selected_egg[0]
|
||||||
logger.info(f"""
|
logger.info(f"""
|
||||||
全部系统初始化完成,{global_config.bot.nickname}已成功唤醒
|
全部系统初始化完成,{global_config.bot.nickname}已成功唤醒
|
||||||
=========================================================
|
=========================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user