Files
Bubbles/function/func_insult.py

159 lines
7.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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],
msg,
target_mention_name: str
) -> bool:
"""
处理群聊中的"骂一下"请求。
Args:
wcf: Wcf 实例。
logger: 日志记录器。
bot_wxid: 机器人自身的 wxid。
send_text_func: 发送文本消息的函数 (content, receiver, at_list=None)。
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}")
except Exception as e:
logger.error(f"生成或发送骂人消息时出错: {e}")
send_text_func("呃,我想骂但出错了...", msg.roomid)
return True