88 MessageEvent ,
99 PrivateMessageEvent ,
1010)
11- from nonebot .plugin import PluginMetadata , on_message
11+ from nonebot .plugin import PluginMetadata , get_driver , on_message
1212
1313from .config import Config , config
1414
2727 "trigger_method" : "on_message" ,
2828 "trigger_condition" : "暂无介绍" ,
2929 "brief_des" : "用于伪造恶搞群友或者好友的消息" ,
30- "detail_des" : "可使用的命令:\n qq+说+内容|qq+说+内容\n \n 例如:\n 123456说你好|654321说你好\n \n 注意:\n 1. 伪造消息的qq号必须是机器人好友或者在群内\n 2. 伪造消息的qq号必须是数字\n 3. 伪造消息的qq号必须是6-10位\n 4. 伪造消息的内容不能包含|和说\n 5. 伪造消息的内容不能超过30个字符\n 6. 伪造消息的内容不能包含特殊字符\n 7. 伪造消息的内容不能包含CQ码\n 8. 伪造消息的内容不能包含空格\n 9. 伪造消息的内容不能包含换行符\n 10. 伪造消息的内容不能包含回车符\n 11. 伪造消息的内容不能包含@" ,
30+ "detail_des" : (
31+ "可使用的命令:\n qq+说+内容|qq+说+内容\n \n 例如:\n 123456说你好|654321说你好\n \n 注意:\n "
32+ "1. 伪造消息的qq号必须是机器人好友或者在群内\n "
33+ "2. 伪造消息的qq号必须是数字\n "
34+ "3. 伪造消息的qq号必须是6-10位\n "
35+ "4. 伪造消息的内容不能包含|和说\n "
36+ "5. 伪造消息的内容不能超过30个字符\n "
37+ "6. 伪造消息的内容不能包含特殊字符\n "
38+ "7. 伪造消息的内容不能包含CQ码\n "
39+ "8. 伪造消息的内容不能包含空格\n "
40+ "9. 伪造消息的内容不能包含换行符\n "
41+ "10. 伪造消息的内容不能包含回车符\n "
42+ "11. 伪造消息的内容不能包含@" ,
43+ ),
3144 }
3245 ],
3346 "menu_template" : "default" ,
3447 },
3548)
3649
50+ driver = get_driver ()
51+ superusers = driver .config .superusers
52+ whitelist = set (config .fakemsg_whitelist )
3753user_split = config .user_split
3854message_split = config .message_split
3955
4056
4157async def check_if_fakemsg (
4258 event : Union [GroupMessageEvent , PrivateMessageEvent ],
4359) -> bool :
44- """
45- 检查是否为伪造消息
46-
47- > 参数:
48- - bot: Bot 对象
49- - event: MessageEvent 对象
50-
51- > 返回值:
52- - 是伪造消息:True
53- - 不是伪造消息:False
54- """
5560 if len (event .original_message ) > 1 and event .original_message [0 ].type == "at" :
5661 if event .original_message [1 ].data .get ("text" ).strip ().startswith ("说" ):
5762 return True
@@ -71,9 +76,10 @@ async def _(bot: Bot, event: Union[PrivateMessageEvent, GroupMessageEvent]):
7176 fetched_message = event .original_message
7277 fake_msg_list = [] # 创建伪造消息列表
7378 at_qq_message = fetched_message ["at" ] # 获取at的qq号
74- text_messgae = fetched_message ["text" ] # 获取文本消息
79+ text_message = fetched_message ["text" ] # 获取文本消息
7580 user_index = 0
76- for text in text_messgae :
81+
82+ for text in text_message :
7783 raw_text : str = text .data ["text" ]
7884 user_msgs = raw_text .split (user_split )
7985 for raw_user_msg in user_msgs :
@@ -84,22 +90,24 @@ async def _(bot: Bot, event: Union[PrivateMessageEvent, GroupMessageEvent]):
8490 user_info = await bot .get_stranger_info (user_id = int (user_qq ))
8591 user_name = user_info ["nickname" ]
8692 user_index += 1
87- fake_msg_list .extend (
88- (user_name , user_qq , msg ) for msg in user_msg .split (message_split )
89- )
9093 elif user_msg not in {"" , " " }:
9194 try :
92- user_qq = user_msg .split ("说" , 1 )[0 ]
93- user_msg = user_msg .split ("说" , 1 )[1 ]
94- except IndexError :
95- await send_fake_msg .finish ("消息格式错误,缺少“说”。" )
96- user_info = await bot .get_stranger_info (user_id = int (user_qq ))
97- user_name = user_info ["nickname" ]
98- fake_msg_list .extend (
99- (user_name , user_qq , msg ) for msg in user_msg .split (message_split )
100- )
95+ user_qq , user_msg = user_msg .split ("说" , 1 )
96+ except ValueError :
97+ await send_fake_msg .finish ("消息格式错误,缺少“说”。" )
10198 else :
10299 continue
100+
101+ # 白名单检测
102+ if user_qq in whitelist and str (event .user_id ) not in superusers :
103+ await send_fake_msg .finish (f"你没有权限伪造该用户({ user_qq } )的消息。" )
104+
105+ user_info = await bot .get_stranger_info (user_id = int (user_qq ))
106+ user_name = user_info ["nickname" ]
107+ fake_msg_list .extend (
108+ (user_name , user_qq , msg ) for msg in user_msg .split (message_split )
109+ )
110+
103111 try :
104112 await send_forward_msg (bot , event , fake_msg_list )
105113 except Exception as e :
@@ -134,6 +142,7 @@ def to_json(info: tuple[str, str, Message]):
134142 }
135143
136144 messages = [to_json (info ) for info in user_message ]
145+
137146 if isinstance (event , GroupMessageEvent ):
138147 await bot .call_api (
139148 "send_group_forward_msg" , group_id = event .group_id , messages = messages
0 commit comments