.
675 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # Forwarder
4 |
5 | ✨ 一个基于 [NoneBot2](https://github.com/nonebot/nonebot2) 的插件, 她可以将甲群的消息转发到乙群。 ✨
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | > *其实她还有另一个名字 —— 转发姬。*
26 |
27 | ### ⭐功能
28 |
29 | 准确的说。她可以将若干个源群(Source Groups)中满足特定规则的消息转发到若干个目标群(Destination Groups)中。
30 |
31 | ### 🎞用途
32 |
33 | 1. 多群广播
34 | 2. 无情的转发机器
35 |
36 | ### 📕用法
37 |
38 | 需要在`.env.*`中有如下配置:
39 |
40 | ```python
41 | forwarder_source_group = [""] # 源信息群
42 | forwarder_dest_group = [""] # 目标群
43 | forwarder_prefix = ["<前缀格式>"] # 触发转发的消息前缀 ( [""] 则为全部转发)
44 | forwarder_explict = [""] # 指定只有特定人消息被转发 ( [""] 则为全部转发)
45 | forwarder_show_sender = "card" # 可选"nickname"显示发送者昵称,"card"显示在发送者在源群中的群名片,其他(如False)不显示发送者
46 | ```
47 |
48 | 按常规方法安装插件即可。
49 |
50 | ### 已知BUG
51 |
52 | 形如 `<三个汉字><图片>` 的信息无法转发,原因未知。
53 |
54 | ### 🎈致谢
55 |
56 | 感谢某个沙雕分享群,让我萌生出把里面的沙雕消息自动转发给我的其他群的想法。
57 |
--------------------------------------------------------------------------------
/nonebot_plugin_forwarder/__init__.py:
--------------------------------------------------------------------------------
1 | from nonebot import on_message, logger
2 | from nonebot.adapters.onebot.v11 import GroupMessageEvent, Bot
3 | from nonebot.rule import startswith
4 | from nonebot import get_driver
5 | import asyncio
6 |
7 | from .config import Config
8 |
9 |
10 | plugin_config = Config.parse_obj(get_driver().config)
11 | forwarder_source_group = plugin_config.forwarder_source_group
12 | forwarder_dest_group = plugin_config.forwarder_dest_group
13 | forwarder_prefix = plugin_config.forwarder_prefix
14 | forwarder_explict = plugin_config.forwarder_explict
15 | forwarder_dest_group = forwarder_dest_group
16 | forwarder_show_sender = plugin_config.forwarder_show_sender
17 |
18 | rule = startswith(forwarder_prefix)
19 | msg_matcher = on_message(rule, priority=10, block=False)
20 |
21 |
22 | async def send_meg(bot: Bot, group_id: str, msg: str):
23 | logger.debug(f"消息转发至: {group_id}")
24 | await bot.send_group_msg(group_id=int(group_id), message=msg, auto_escape=False)
25 |
26 |
27 | @msg_matcher.handle()
28 | async def _(bot: Bot, event: GroupMessageEvent):
29 | if str(event.group_id) in forwarder_source_group:
30 | flag = forwarder_explict[0] == "" or str(
31 | event.user_id) in forwarder_explict
32 | if flag and forwarder_dest_group[0] != "":
33 | msg = str(event.message)
34 | if forwarder_show_sender == "card":
35 | if event.sender.card == "":
36 | msg = str(event.sender.nickname) + ": " + msg
37 | else:
38 | msg = str(event.sender.card) + ": " + msg
39 | elif forwarder_show_sender == "nickname":
40 | msg = str(event.sender.nickname) + ": " + msg
41 | logger.debug(f"欲转发消息: {msg} | 来源: {event.group_id}")
42 | tasks = [send_meg(bot, gid, msg)
43 | for gid in forwarder_dest_group if gid != str(event.group_id)]
44 | await asyncio.wait(tasks)
45 |
--------------------------------------------------------------------------------
/nonebot_plugin_forwarder/config.py:
--------------------------------------------------------------------------------
1 | from nonebot import logger
2 | from pydantic import BaseModel, Extra
3 |
4 |
5 | class Config(BaseModel, extra=Extra.ignore):
6 | forwarder_source_group: list = []
7 | forwarder_dest_group: list = []
8 | forwarder_prefix: list = [""]
9 | forwarder_explict: list = [""]
10 | forwarder_show_sender: str = "none"
11 |
12 | # 重载 Pydantic 的 __init__ 方法,字段不存在时打印warning
13 | def __init__(self, **data):
14 | super().__init__(**data)
15 | for field in self.__fields__.values():
16 | if field.name not in data:
17 | default_value = getattr(self, field.name)
18 | logger.warning(
19 | f"[转发姬] 未发现配置项 {field.name} , 采用默认值: {default_value}")
20 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | from setuptools import setup
2 |
3 | with open("README.md", "r", encoding="utf-8") as fh:
4 | long_description = fh.read()
5 |
6 | setup(
7 | name="nonebot-plugin-forwarder",
8 | version="2.1.6",
9 | author="Kl1nge5",
10 | description="A plugin based on NoneBot2, which can broadcast message from Source Groups to Destination Groups.",
11 | long_description=long_description,
12 | long_description_content_type="text/markdown",
13 | url="https://github.com/ninthseason/nonebot_plugin_forwarder",
14 | project_urls={
15 | "Bug Tracker": "https://github.com/ninthseason/nonebot_plugin_forwarder/issues",
16 | },
17 | classifiers=[
18 | "Programming Language :: Python :: 3",
19 | "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
20 | "Operating System :: OS Independent",
21 | ],
22 | packages=["nonebot_plugin_forwarder"],
23 | python_requires=">=3.7",
24 | install_requires=[
25 | "nonebot2 >= 2.0.0b2",
26 | "nonebot-adapter-onebot >= 2.0.0b1"
27 | ],
28 | )
29 |
--------------------------------------------------------------------------------