初始提交

This commit is contained in:
Zylan
2025-04-23 13:30:10 +08:00
commit db26c07bb3
49 changed files with 40973 additions and 0 deletions

164
function/func_insult.py Normal file
View File

@@ -0,0 +1,164 @@
import random
import re
from wcferry import Wcf
from typing import Callable, Optional
class InsultGenerator:
"""
生成贴吧风格的骂人话术
"""
# 贴吧风格骂人话术模板
INSULT_TEMPLATES = [
"{target},你这想法属实有点抽象,建议回炉重造。",
"不是吧,{target},这都能说出来?大脑是用来思考的,不是用来长个儿的。",
"乐,{target} 你成功逗笑了我,就像看猴戏一样。",
"我说 {target} 啊,网上吵架没赢过,现实打架没输过是吧?",
"{target},听君一席话,浪费十分钟。",
"给你个梯子,{target},下个台阶吧,别搁这丢人现眼了。",
"就这?{target},就这?我还以为多大事呢。",
"{target},你是不是网线直连马桶的?味儿有点冲。",
"讲道理,{target},你这发言水平,在贴吧都活不过三楼。",
"{target},建议你去买两斤猪脑子煲汤喝,补补智商。",
"说真的,{target},你这智商要是放在好声音能把那四把椅子都转回来。",
"{target},放着好端端的智商不用,非得秀下限是吧?",
"我看你是典型的脑子搭错弦,{target},说话一套一套的。",
"{target},别整天搁这儿水经验了,你这水平也就适合到幼儿园门口卖糖水。",
"你这句话水平跟你智商一样,{target},都在地平线以下。",
"就你这个水平,{target},看王者荣耀的视频都能让你买错装备。",
"{target},整天叫唤啥呢?我没看《西游记》的时候真不知道猴子能说人话。",
"我听懂了,{target},你说的都对,可是能不能先把脑子装回去再说话?",
"{target}鼓个掌,成功把我逗乐了,这么多年的乐子人,今天是栽你手里了。",
"{target},我看你是孔子放屁——闻(文)所未闻(闻)啊。",
"收敛点吧,{target},你这智商余额明显不足了。",
"{target},你要是没话说可以咬个打火机,大家爱看那个。",
"{target},知道你急,但你先别急,喝口水慢慢说。",
"{target},你这发言跟你长相一样,突出一个随心所欲。",
"不是,{target},你这脑回路是盘山公路吗?九曲十八弯啊?",
"{target},太平洋没加盖,觉得委屈可以跳下去。",
"搁这儿装啥大尾巴狼呢 {target}?尾巴都快摇断了吧?",
"{target},我看你不是脑子进水,是脑子被驴踢了吧?",
"给你脸了是吧 {target}?真以为自己是个人物了?",
"{target},少在这里狺狺狂吠,影响市容。",
"你这智商,{target},二维码扫出来都得是付款码。",
"乐死我了,{target},哪来的自信在这里指点江山?",
"{target},回去多读两年书吧,省得出来丢人现眼。",
"赶紧爬吧 {target},别在这污染空气了。",
"我看你是没挨过打,{target},这么嚣张。",
"给你个键盘,{target},你能敲出一部《圣经》来是吧?",
"脑子是个好东西,{target},希望你也有一个。",
"{target},少在这里秀你的智商下限。",
"就这?{target}?我还以为多牛逼呢,原来是个憨批。",
"{target},你这理解能力,怕不是胎教没做好。",
"{target},我看你像个小丑,上蹿下跳的。",
"你这逻辑,{target},体育老师教的吧?",
"你这发言,{target},堪称当代迷惑行为大赏。",
"{target},你这狗叫声能不能小点?",
"你是猴子请来的救兵吗?{target}",
"{target},你这脑容量,怕是连条草履虫都不如。",
"给你个杆子你就往上爬是吧?{target}",
"{target},你这嘴跟开了光似的,叭叭个没完。",
"省省吧 {target},你的智商税已经交得够多了。",
"{target},你这发言如同老太太的裹脚布,又臭又长。",
"{target},我看你是真的皮痒了。",
"少在这里妖言惑众,{target},滚回你的老鼠洞去。",
"{target},你就像个苍蝇一样,嗡嗡嗡烦死人。"
]
@staticmethod
def generate_insult(target_name: str) -> str:
"""
随机生成一句针对目标用户的骂人话术(贴吧风格)
Args:
target_name (str): 被骂的人的名字
Returns:
str: 生成的骂人语句
"""
if not target_name or target_name.strip() == "":
target_name = "那个谁" # 兜底,防止名字为空
template = random.choice(InsultGenerator.INSULT_TEMPLATES)
return template.format(target=target_name)
def generate_random_insult(target_name: str) -> str:
"""
随机生成一句针对目标用户的骂人话术(贴吧风格)
函数封装,方便直接调用
Args:
target_name (str): 被骂的人的名字
Returns:
str: 生成的骂人语句
"""
return InsultGenerator.generate_insult(target_name)
def handle_insult_request(
wcf: Wcf,
logger,
bot_wxid: str,
send_text_func: Callable[[str, str, Optional[str]], None],
trigger_goblin_gift_func: Callable[[object], None],
msg,
target_mention_name: str
) -> bool:
"""
处理群聊中的"骂一下"请求。
Args:
wcf: Wcf 实例。
logger: 日志记录器。
bot_wxid: 机器人自身的 wxid。
send_text_func: 发送文本消息的函数 (content, receiver, at_list=None)。
trigger_goblin_gift_func: 触发哥布林馈赠的函数。
msg: 原始消息对象 (需要 .roomid 属性)。
target_mention_name: 从消息中提取的被@用户的名称。
Returns:
bool: 如果处理了该请求(无论成功失败),返回 True否则返回 False。
"""
logger.info(f"群聊 {msg.roomid} 中处理骂人指令,提及目标:{target_mention_name}")
actual_target_name = target_mention_name
target_wxid = None
try:
room_members = wcf.get_chatroom_members(msg.roomid)
found = False
for wxid, name in room_members.items():
if target_mention_name == name:
target_wxid = wxid
actual_target_name = name
found = True
break
if not found:
for wxid, name in room_members.items():
if target_mention_name in name and wxid != bot_wxid:
target_wxid = wxid
actual_target_name = name
logger.info(f"部分匹配到用户: {name} ({wxid})")
break
except Exception as e:
logger.error(f"查找群成员信息时出错: {e}")
if target_wxid and target_wxid == bot_wxid:
send_text_func("😅 不行,我不能骂我自己。", msg.roomid)
return True
try:
insult_text = generate_random_insult(actual_target_name)
send_text_func(insult_text, msg.roomid)
logger.info(f"已发送骂人消息至群 {msg.roomid},目标: {actual_target_name}")
if trigger_goblin_gift_func:
trigger_goblin_gift_func(msg)
except Exception as e:
logger.error(f"生成或发送骂人消息时出错: {e}")
send_text_func("呃,我想骂但出错了...", msg.roomid)
return True