mirror of
https://github.com/Zippland/Bubbles.git
synced 2026-01-19 01:21:15 +08:00
159 lines
7.3 KiB
Python
159 lines
7.3 KiB
Python
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 |