2021-05-20 20:13:49 +08:00
|
|
|
|
import random
|
2023-02-26 22:17:26 +08:00
|
|
|
|
|
2021-05-20 20:13:49 +08:00
|
|
|
|
from nonebot import on_message
|
2022-02-21 15:59:17 +08:00
|
|
|
|
from nonebot.adapters.onebot.v11 import GroupMessageEvent
|
2023-02-26 22:17:26 +08:00
|
|
|
|
from nonebot.adapters.onebot.v11.permission import GROUP
|
2021-10-03 14:24:07 +08:00
|
|
|
|
|
2023-02-26 22:17:26 +08:00
|
|
|
|
from configs.config import NICKNAME, Config
|
|
|
|
|
|
from configs.path_config import TEMP_PATH
|
|
|
|
|
|
from services.log import logger
|
|
|
|
|
|
from utils.http_utils import AsyncHttpx
|
|
|
|
|
|
from utils.image_utils import get_img_hash
|
|
|
|
|
|
from utils.message_builder import image
|
|
|
|
|
|
from utils.utils import get_message_img, get_message_text
|
2021-10-03 14:24:07 +08:00
|
|
|
|
|
|
|
|
|
|
__zx_plugin_name__ = "复读"
|
|
|
|
|
|
__plugin_usage__ = """
|
|
|
|
|
|
usage:
|
|
|
|
|
|
重复3次相同的消息时会复读
|
|
|
|
|
|
""".strip()
|
|
|
|
|
|
__plugin_des__ = "群友的本质是什么?是复读机哒!"
|
2021-12-16 11:16:28 +08:00
|
|
|
|
__plugin_type__ = ("其他",)
|
2021-10-03 14:24:07 +08:00
|
|
|
|
__plugin_version__ = 0.1
|
|
|
|
|
|
__plugin_author__ = "HibiKier"
|
|
|
|
|
|
__plugin_task__ = {"fudu": "复读"}
|
2021-11-04 16:11:50 +08:00
|
|
|
|
__plugin_configs__ = {
|
2023-02-26 22:17:26 +08:00
|
|
|
|
"FUDU_PROBABILITY": {
|
|
|
|
|
|
"value": 0.7,
|
|
|
|
|
|
"help": "复读概率",
|
|
|
|
|
|
"default_value": 0.7,
|
|
|
|
|
|
"type": float,
|
|
|
|
|
|
}
|
2021-11-04 16:11:50 +08:00
|
|
|
|
}
|
2021-12-16 11:16:28 +08:00
|
|
|
|
Config.add_plugin_config(
|
2023-02-26 22:17:26 +08:00
|
|
|
|
"_task", "DEFAULT_FUDU", True, help_="被动 复读 进群默认开关状态", default_value=True, type=bool
|
2021-12-16 11:16:28 +08:00
|
|
|
|
)
|
2021-05-20 20:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Fudu:
|
|
|
|
|
|
def __init__(self):
|
2021-08-17 23:17:08 +08:00
|
|
|
|
self.data = {}
|
2021-05-20 20:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
def append(self, key, content):
|
2021-08-17 23:17:08 +08:00
|
|
|
|
self._create(key)
|
2021-09-05 02:21:38 +08:00
|
|
|
|
self.data[key]["data"].append(content)
|
2021-05-20 20:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
def clear(self, key):
|
2021-08-17 23:17:08 +08:00
|
|
|
|
self._create(key)
|
2021-09-05 02:21:38 +08:00
|
|
|
|
self.data[key]["data"] = []
|
|
|
|
|
|
self.data[key]["is_repeater"] = False
|
2021-05-20 20:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
def size(self, key) -> int:
|
2021-08-17 23:17:08 +08:00
|
|
|
|
self._create(key)
|
2021-09-05 02:21:38 +08:00
|
|
|
|
return len(self.data[key]["data"])
|
2021-05-20 20:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
def check(self, key, content) -> bool:
|
2021-08-17 23:17:08 +08:00
|
|
|
|
self._create(key)
|
2021-09-05 02:21:38 +08:00
|
|
|
|
return self.data[key]["data"][0] == content
|
2021-05-20 20:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
def get(self, key):
|
2021-08-17 23:17:08 +08:00
|
|
|
|
self._create(key)
|
2021-09-05 02:21:38 +08:00
|
|
|
|
return self.data[key]["data"][0]
|
2021-08-17 23:17:08 +08:00
|
|
|
|
|
|
|
|
|
|
def is_repeater(self, key):
|
|
|
|
|
|
self._create(key)
|
2021-09-05 02:21:38 +08:00
|
|
|
|
return self.data[key]["is_repeater"]
|
2021-08-17 23:17:08 +08:00
|
|
|
|
|
|
|
|
|
|
def set_repeater(self, key):
|
|
|
|
|
|
self._create(key)
|
2021-09-05 02:21:38 +08:00
|
|
|
|
self.data[key]["is_repeater"] = True
|
2021-08-17 23:17:08 +08:00
|
|
|
|
|
|
|
|
|
|
def _create(self, key):
|
|
|
|
|
|
if self.data.get(key) is None:
|
2021-09-05 02:21:38 +08:00
|
|
|
|
self.data[key] = {"is_repeater": False, "data": []}
|
2021-05-20 20:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
2021-09-05 02:21:38 +08:00
|
|
|
|
_fudu_list = Fudu()
|
2021-05-20 20:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
2022-05-21 13:15:53 +08:00
|
|
|
|
fudu = on_message(permission=GROUP, priority=999)
|
2021-05-20 20:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@fudu.handle()
|
2022-02-21 15:59:17 +08:00
|
|
|
|
async def _(event: GroupMessageEvent):
|
|
|
|
|
|
if event.is_tome():
|
2021-05-20 20:13:49 +08:00
|
|
|
|
return
|
2022-05-21 13:15:53 +08:00
|
|
|
|
if msg := get_message_text(event.json()):
|
|
|
|
|
|
if msg.startswith(f"@可爱的{NICKNAME}"):
|
2021-07-30 21:21:51 +08:00
|
|
|
|
await fudu.finish("复制粘贴的虚空艾特?", at_sender=True)
|
2022-02-09 20:05:49 +08:00
|
|
|
|
img = get_message_img(event.json())
|
2022-02-21 15:59:17 +08:00
|
|
|
|
msg = get_message_text(event.json())
|
2022-02-09 20:05:49 +08:00
|
|
|
|
if not img and not msg:
|
2021-05-20 20:13:49 +08:00
|
|
|
|
return
|
2022-02-09 20:05:49 +08:00
|
|
|
|
if img:
|
2023-02-26 22:17:26 +08:00
|
|
|
|
img_hash = await get_fudu_img_hash(img[0], event.group_id)
|
2021-05-20 20:13:49 +08:00
|
|
|
|
else:
|
2021-07-30 21:21:51 +08:00
|
|
|
|
img_hash = ""
|
|
|
|
|
|
add_msg = msg + "|-|" + img_hash
|
2021-09-05 02:21:38 +08:00
|
|
|
|
if _fudu_list.size(event.group_id) == 0:
|
|
|
|
|
|
_fudu_list.append(event.group_id, add_msg)
|
|
|
|
|
|
elif _fudu_list.check(event.group_id, add_msg):
|
|
|
|
|
|
_fudu_list.append(event.group_id, add_msg)
|
2021-05-20 20:13:49 +08:00
|
|
|
|
else:
|
2021-09-05 02:21:38 +08:00
|
|
|
|
_fudu_list.clear(event.group_id)
|
|
|
|
|
|
_fudu_list.append(event.group_id, add_msg)
|
|
|
|
|
|
if _fudu_list.size(event.group_id) > 2:
|
2021-11-04 16:11:50 +08:00
|
|
|
|
if random.random() < Config.get_config(
|
|
|
|
|
|
"fudu", "FUDU_PROBABILITY"
|
|
|
|
|
|
) and not _fudu_list.is_repeater(event.group_id):
|
2021-05-20 20:13:49 +08:00
|
|
|
|
if random.random() < 0.2:
|
2022-05-23 22:06:53 +08:00
|
|
|
|
if msg.endswith("打断施法!"):
|
2023-02-26 22:17:26 +08:00
|
|
|
|
await fudu.finish("[[_task|fudu]]打断" + msg)
|
2022-05-23 22:06:53 +08:00
|
|
|
|
else:
|
|
|
|
|
|
await fudu.finish("[[_task|fudu]]打断施法!")
|
2021-09-05 02:21:38 +08:00
|
|
|
|
_fudu_list.set_repeater(event.group_id)
|
2022-02-09 20:05:49 +08:00
|
|
|
|
if img and msg:
|
2022-05-24 14:01:08 +08:00
|
|
|
|
rst = msg + image(TEMP_PATH / f"compare_{event.group_id}_img.jpg")
|
2022-02-09 20:05:49 +08:00
|
|
|
|
elif img:
|
2022-05-24 14:01:08 +08:00
|
|
|
|
rst = image(TEMP_PATH / f"compare_{event.group_id}_img.jpg")
|
2021-05-20 20:13:49 +08:00
|
|
|
|
elif msg:
|
|
|
|
|
|
rst = msg
|
|
|
|
|
|
else:
|
2021-07-30 21:21:51 +08:00
|
|
|
|
rst = ""
|
2021-05-20 20:13:49 +08:00
|
|
|
|
if rst:
|
2022-05-23 22:06:53 +08:00
|
|
|
|
await fudu.finish("[[_task|fudu]]" + rst)
|
2021-05-20 20:13:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
2022-10-23 11:49:15 +08:00
|
|
|
|
async def get_fudu_img_hash(url, group_id):
|
|
|
|
|
|
try:
|
|
|
|
|
|
if await AsyncHttpx.download_file(
|
|
|
|
|
|
url, TEMP_PATH / f"compare_{group_id}_img.jpg"
|
|
|
|
|
|
):
|
|
|
|
|
|
img_hash = get_img_hash(TEMP_PATH / f"compare_{group_id}_img.jpg")
|
|
|
|
|
|
return str(img_hash)
|
|
|
|
|
|
else:
|
|
|
|
|
|
logger.warning(f"复读下载图片失败...")
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
|
logger.warning(f"复读读取图片Hash出错 {type(e)}:{e}")
|
|
|
|
|
|
return ""
|