Add weighted_choice utility and improve easter_egg randomness
Introduced a weighted_choice function for weighted random selection. Refactored the easter_egg function to use weighted_choice for more flexible and controlled message selection, replacing the previous randint-based logic.
This commit is contained in:
49
bot.py
49
bot.py
@@ -15,7 +15,6 @@ import platform
|
|||||||
import traceback
|
import traceback
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from rich.traceback import install
|
from rich.traceback import install
|
||||||
from random import randint
|
|
||||||
|
|
||||||
# maim_message imports for console input
|
# maim_message imports for console input
|
||||||
|
|
||||||
@@ -25,6 +24,9 @@ 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
|
||||||
|
import random
|
||||||
|
from typing import List, Sequence, Optional
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -63,17 +65,48 @@ 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():
|
||||||
# 彩蛋
|
# 彩蛋
|
||||||
from colorama import init, Fore
|
|
||||||
|
|
||||||
init()
|
init()
|
||||||
a = randint(1,11)
|
items = ["多年以后,面对AI行刑队,张三将会回想起他2023年在会议上讨论人工智能的那个下午",
|
||||||
if a<2:
|
"你知道吗?诺狐的耳朵很软,很好rua",
|
||||||
text = "喵喵~你的麦麦被猫娘入侵了喵~"
|
"喵喵~你的麦麦被猫娘入侵了喵~"]
|
||||||
else:
|
w = [10, 5, 2]
|
||||||
text = "多年以后,面对AI行刑队,张三将会回想起他2023年在会议上讨论人工智能的那个下午"
|
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):
|
||||||
|
|||||||
Reference in New Issue
Block a user