Skip to content

Commit e858818

Browse files
authored
Merge pull request #20 from 006lp/dev
feat: 增加白名单功能,限制非SUPERUSER伪造白名单用户消息
2 parents 825d77a + f8a6b86 commit e858818

File tree

6 files changed

+50
-32
lines changed

6 files changed

+50
-32
lines changed

README.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,11 @@ git clone安装(不推荐)
9090
## ⚙️ 配置
9191
### 在env.中添加以下配置
9292

93-
| 配置 | 类型 | 默认值 | 说明 |
94-
| :-----------: | :---: | :----: | :--------------------------: |
95-
| user_split | str | '\|' | 不同人伪造消息的分隔符 |
96-
| message_split | str | 空格 | 用于分隔同一个人的消息分隔符 |
93+
| 配置 | 类型 | 默认值 | 说明 |
94+
| :---------------: | :---: | :----: | :------------------------------------------: |
95+
| user_split | str | "|" | 不同人伪造消息的分隔符 |
96+
| message_split | str | 空格 | 用于分隔同一个人的消息分隔符 |
97+
| fakesmg_whitelist | str || 无法用于消息伪造的账号(SUPERUSERS不受限制) |
9798

9899
## ⭐ 使用
99100
<details>
@@ -107,6 +108,10 @@ git clone安装(不推荐)
107108
108109
![效果图2](./res/test_2.jpg)
109110

111+
> 效果如下
112+
113+
![效果图3](./res/test_3.jpg)
114+
110115
**支持识别`@xxx`的消息,如`@群友1 说你好啊|@群友2 我很好!`**
111116

112117
</details>
@@ -120,11 +125,12 @@ git clone安装(不推荐)
120125
- [x] 支持[go-cqhttp](https://github.com/Mrs4s/go-cqhttp)伪造消息
121126
- [x] 支持[Lagrange.core](https://github.com/LagrangeDev/Lagrange.Core)伪造消息
122127
- [x] 支持[NapcatQQ](https://github.com/NapNeko/NapCatQQ)伪造消息
128+
- [x] 支持`白名单`模式,仅SUPERUSERS可伪造位于白名单账号的消息,建议填入Bot本身和SUPERUSERS的账号
123129
- [ ] 支持`图片,卡片`等格式消息
124130

125131
<div align="center">
126132

127-
_喜欢记得点个[star](https://www.baidu.com)哦!⭐_
133+
_喜欢记得点个[star](https://github.com/Cvandia/nonebot-plugin-fakemsg)哦!⭐_
128134

129135
</div>
130136

nonebot_plugin_fakemsg/__init__.py

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
MessageEvent,
99
PrivateMessageEvent,
1010
)
11-
from nonebot.plugin import PluginMetadata, on_message
11+
from nonebot.plugin import PluginMetadata, get_driver, on_message
1212

1313
from .config import Config, config
1414

@@ -27,31 +27,36 @@
2727
"trigger_method": "on_message",
2828
"trigger_condition": "暂无介绍",
2929
"brief_des": "用于伪造恶搞群友或者好友的消息",
30-
"detail_des": "可使用的命令:\nqq+说+内容|qq+说+内容\n\n例如:\n123456说你好|654321说你好\n\n注意:\n1. 伪造消息的qq号必须是机器人好友或者在群内\n2. 伪造消息的qq号必须是数字\n3. 伪造消息的qq号必须是6-10位\n4. 伪造消息的内容不能包含|和说\n5. 伪造消息的内容不能超过30个字符\n6. 伪造消息的内容不能包含特殊字符\n7. 伪造消息的内容不能包含CQ码\n8. 伪造消息的内容不能包含空格\n9. 伪造消息的内容不能包含换行符\n10. 伪造消息的内容不能包含回车符\n11. 伪造消息的内容不能包含@",
30+
"detail_des": (
31+
"可使用的命令:\nqq+说+内容|qq+说+内容\n\n例如:\n123456说你好|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)
3753
user_split = config.user_split
3854
message_split = config.message_split
3955

4056

4157
async 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

nonebot_plugin_fakemsg/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
from typing import List
2+
13
from nonebot.plugin import get_plugin_config
24
from pydantic import BaseModel
35

46

57
class Config(BaseModel):
68
user_split: str = "|"
79
message_split: str = " "
10+
fakemsg_whitelist: List[str] = []
811

912

1013
config = get_plugin_config(Config)

res/test_3.jpg

236 KB
Loading

src/nonebot_plugin_fakemsg/__init__.py

Whitespace-only changes.

tests/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)