2023-07-01 11:58:35 +00:00
|
|
|
|
"""
|
|
|
|
|
自动回复Emoji插件
|
|
|
|
|
Author: SuperManito
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
from pagermaid import bot, log
|
|
|
|
|
from pagermaid.single_utils import sqlite
|
|
|
|
|
from pagermaid.enums import Client, Message
|
|
|
|
|
from pagermaid.utils import lang, edit_delete, pip_install
|
|
|
|
|
from pagermaid.listener import listener
|
|
|
|
|
|
|
|
|
|
pip_install("emoji")
|
|
|
|
|
|
|
|
|
|
import emoji
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 获取内容中的表情符号,并用|分割
|
|
|
|
|
def get_emoji(text):
|
|
|
|
|
if emojiArr := emoji.distinct_emoji_list(text):
|
2023-07-01 12:18:58 +00:00
|
|
|
|
delimiter = "|"
|
2023-07-01 11:58:35 +00:00
|
|
|
|
return delimiter.join(emojiArr)
|
|
|
|
|
else:
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
2023-07-01 12:18:58 +00:00
|
|
|
|
@listener(
|
|
|
|
|
is_plugin=False,
|
|
|
|
|
outgoing=True,
|
|
|
|
|
command="auto_send_reactions",
|
|
|
|
|
description="\n自动回复Emoji插件",
|
|
|
|
|
parameters="`\n自动回复Emoji插件,支持同时设置多个目标生效用户,目前仅支持回复用户在群组中发送的消息,默认在所有已加入的群组中生效\n"
|
|
|
|
|
"\n**设置插件状态**:"
|
|
|
|
|
"\n启用:`,auto_send_reactions enable`"
|
|
|
|
|
"\n停用:`,auto_send_reactions disable`"
|
|
|
|
|
"\n\n**设置目标生效用户**:"
|
|
|
|
|
"\n添加:`,auto_send_reactions set <用户id/用户名> <表情内容>`"
|
|
|
|
|
"\n移除:`,auto_send_reactions unset <用户id/用户名>`"
|
|
|
|
|
"\n支持直接回复消息以进行快速设置,可以省略用户标识参数"
|
|
|
|
|
"\n\n**设置生效群组黑名单**:"
|
|
|
|
|
"\n添加:`,auto_send_reactions block <群组id/群组用户名>`"
|
|
|
|
|
"\n移除:`,auto_send_reactions unblock <群组id/群组用户名>\n",
|
|
|
|
|
)
|
2023-07-01 11:58:35 +00:00
|
|
|
|
async def AutoSendReactions(client: Client, message: Message):
|
|
|
|
|
reply = message.reply_to_message
|
|
|
|
|
|
|
|
|
|
# 启用插件
|
|
|
|
|
if message.parameter[0] == "enable":
|
|
|
|
|
# for ID in ID_FROM_ARRAY :
|
|
|
|
|
# # 检查来源频道/群组
|
|
|
|
|
# try:
|
|
|
|
|
# channel = await bot.get_chat(ID)
|
|
|
|
|
# except Exception as e:
|
|
|
|
|
# errorMsg = f"第{e.__traceback__.tb_lineno}行:{e}"
|
|
|
|
|
# await message.edit(f"出错了呜呜呜 ~ 无法识别的来源对话。\n\n{errorMsg}")
|
|
|
|
|
# return
|
|
|
|
|
|
|
|
|
|
if not sqlite.get("AutoSendReactions.Enable"):
|
2023-07-01 12:18:58 +00:00
|
|
|
|
sqlite["AutoSendReactions.Enable"] = "yes"
|
2023-07-01 11:58:35 +00:00
|
|
|
|
|
|
|
|
|
# 返回消息
|
|
|
|
|
await edit_delete(message, "✅ **已启用自动回复表情插件**")
|
|
|
|
|
|
|
|
|
|
elif message.parameter[0] == "disable":
|
|
|
|
|
if sqlite.get("AutoSendReactions.Enable"):
|
|
|
|
|
del sqlite["AutoSendReactions.Enable"]
|
|
|
|
|
|
|
|
|
|
# 返回消息
|
|
|
|
|
await edit_delete(message, "❌ **已停用自动回复表情插件**")
|
|
|
|
|
|
|
|
|
|
elif message.parameter[0] in ["set", "unset"]:
|
|
|
|
|
## 设置插件
|
2023-07-01 12:18:58 +00:00
|
|
|
|
if message.parameter[0] == "set":
|
2023-07-01 11:58:35 +00:00
|
|
|
|
if not reply and (len(message.parameter) == 3):
|
|
|
|
|
target = message.parameter[1]
|
|
|
|
|
content = message.parameter[2]
|
|
|
|
|
try:
|
|
|
|
|
# 获取用户信息
|
|
|
|
|
user_info = await bot.get_users(target)
|
|
|
|
|
# 判断参数合法性
|
|
|
|
|
if not user_info:
|
|
|
|
|
return await message.edit("❌ **目标用户不存在或参数有误**")
|
|
|
|
|
if not content or not get_emoji(content):
|
|
|
|
|
return await message.edit("❌ **Emoji参数不能为空或不合法**")
|
|
|
|
|
user_name = (
|
2023-07-01 12:18:58 +00:00
|
|
|
|
f"{user_info.first_name} {user_info.last_name}"
|
2023-07-01 11:58:35 +00:00
|
|
|
|
if user_info.last_name
|
|
|
|
|
else user_info.first_name
|
|
|
|
|
)
|
|
|
|
|
# 设置或更新
|
|
|
|
|
hasSetted = sqlite.get(f"AutoSendReactions.{target}")
|
|
|
|
|
sqlite[f"AutoSendReactions.{target}"] = content
|
|
|
|
|
await edit_delete(
|
|
|
|
|
message,
|
2023-07-01 12:18:58 +00:00
|
|
|
|
f"✅ 已{'更新' if hasSetted else '添加'}对 __{user_name}__ 的自动回复Emoji设置**",
|
2023-07-01 11:58:35 +00:00
|
|
|
|
)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
await message.edit(message, f"❌ **在设置中遇到了一些错误** > {e}")
|
|
|
|
|
await log(e) # 打印错误日志
|
|
|
|
|
|
|
|
|
|
elif reply and (len(message.parameter) == 2):
|
|
|
|
|
from_user = reply.from_user
|
|
|
|
|
target = from_user.id
|
|
|
|
|
content = message.parameter[1]
|
|
|
|
|
try:
|
|
|
|
|
# 判断参数合法性
|
|
|
|
|
if not content or not get_emoji(content):
|
|
|
|
|
return await message.edit("❌ **Emoji参数不能为空或不合法**")
|
|
|
|
|
user_name = (
|
2023-07-01 12:18:58 +00:00
|
|
|
|
f"{from_user.first_name} {from_user.last_name}"
|
2023-07-01 11:58:35 +00:00
|
|
|
|
if from_user.last_name
|
|
|
|
|
else from_user.first_name
|
|
|
|
|
)
|
|
|
|
|
# 设置或更新
|
|
|
|
|
hasSetted = sqlite.get(f"AutoSendReactions.{target}")
|
|
|
|
|
sqlite[f"AutoSendReactions.{target}"] = content
|
|
|
|
|
await edit_delete(
|
|
|
|
|
message,
|
2023-07-01 12:18:58 +00:00
|
|
|
|
f"✅ 已{'更新' if hasSetted else '添加'}对 __{user_name}__ 的自动回复Emoji设置",
|
2023-07-01 11:58:35 +00:00
|
|
|
|
)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
await message.edit(message, f"❌ **在设置中遇到了一些错误** > {e}")
|
|
|
|
|
await log(e) # 打印错误日志
|
|
|
|
|
else:
|
2023-07-01 12:18:58 +00:00
|
|
|
|
return await message.edit(f"{lang('error_prefix')}{lang('arg_error')}")
|
2023-07-01 11:58:35 +00:00
|
|
|
|
|
2023-07-01 12:18:58 +00:00
|
|
|
|
elif message.parameter[0] == "unset":
|
2023-07-01 11:58:35 +00:00
|
|
|
|
if not reply and (len(message.parameter) == 2):
|
|
|
|
|
target = message.parameter[1]
|
|
|
|
|
try:
|
|
|
|
|
# 获取用户信息
|
|
|
|
|
user_info = await bot.get_users(target)
|
|
|
|
|
# 判断参数合法性
|
|
|
|
|
if not user_info:
|
|
|
|
|
return await message.edit("❌ **目标用户不存在或参数有误**")
|
|
|
|
|
user_id = user_info.id
|
|
|
|
|
user_name = (
|
2023-07-01 12:18:58 +00:00
|
|
|
|
f"{user_info.first_name} {user_info.last_name}"
|
2023-07-01 11:58:35 +00:00
|
|
|
|
if user_info.last_name
|
|
|
|
|
else user_info.first_name
|
|
|
|
|
)
|
|
|
|
|
if hasSetted := sqlite.get(f"AutoSendReactions.{user_id}"):
|
|
|
|
|
del sqlite[f"AutoSendReactions.{user_id}"]
|
|
|
|
|
await edit_delete(
|
2023-07-01 12:18:58 +00:00
|
|
|
|
message, f"✅ 对 __{user_name}__ 的自动回复Emoji设置已删除"
|
|
|
|
|
)
|
2023-07-01 11:58:35 +00:00
|
|
|
|
else:
|
|
|
|
|
await edit_delete(
|
2023-07-01 12:18:58 +00:00
|
|
|
|
message, f"❌ 还没有对 __{user_name}__ 设置自动回复Emoji哦~"
|
|
|
|
|
)
|
2023-07-01 11:58:35 +00:00
|
|
|
|
except Exception as e:
|
|
|
|
|
await message.edit(message, f"❌ **在设置中遇到了一些错误** > {e}")
|
|
|
|
|
await log(e) # 打印错误日志
|
|
|
|
|
|
|
|
|
|
elif reply and (len(message.parameter) == 1):
|
|
|
|
|
from_user = reply.from_user
|
|
|
|
|
target = from_user.id
|
|
|
|
|
try:
|
|
|
|
|
user_name = (
|
2023-07-01 12:18:58 +00:00
|
|
|
|
f"{from_user.first_name} {from_user.last_name}"
|
2023-07-01 11:58:35 +00:00
|
|
|
|
if from_user.last_name
|
|
|
|
|
else from_user.first_name
|
|
|
|
|
)
|
|
|
|
|
if hasSetted := sqlite.get(f"AutoSendReactions.{target}"):
|
|
|
|
|
del sqlite[f"AutoSendReactions.{target}"]
|
|
|
|
|
await edit_delete(
|
2023-07-01 12:18:58 +00:00
|
|
|
|
message, f"✅ 已删除对 __{user_name}__ 的自动回复Emoji设置"
|
|
|
|
|
)
|
2023-07-01 11:58:35 +00:00
|
|
|
|
else:
|
|
|
|
|
await edit_delete(
|
2023-07-01 12:18:58 +00:00
|
|
|
|
message, f"❌ 还没有对 __{user_name}__ 设置自动回复Emoji哦~"
|
|
|
|
|
)
|
2023-07-01 11:58:35 +00:00
|
|
|
|
except Exception as e:
|
|
|
|
|
await message.edit(message, f"❌ **在设置中遇到了一些错误** > {e}")
|
|
|
|
|
await log(e) # 打印错误日志
|
|
|
|
|
else:
|
2023-07-01 12:18:58 +00:00
|
|
|
|
return await message.edit(f"{lang('error_prefix')}{lang('arg_error')}")
|
2023-07-01 11:58:35 +00:00
|
|
|
|
|
|
|
|
|
else:
|
2023-07-01 12:18:58 +00:00
|
|
|
|
return await message.edit(f"{lang('error_prefix')}{lang('arg_error')}")
|
2023-07-01 11:58:35 +00:00
|
|
|
|
|
2023-07-01 12:18:58 +00:00
|
|
|
|
elif (
|
|
|
|
|
(message.parameter[0] == "block")
|
|
|
|
|
or (message.parameter[0] == "unblock")
|
|
|
|
|
and (len(message.parameter) == 2)
|
|
|
|
|
):
|
2023-07-01 11:58:35 +00:00
|
|
|
|
group = message.parameter[1]
|
|
|
|
|
group_info = await bot.get_chat(chat_id=group)
|
|
|
|
|
if not group_info:
|
|
|
|
|
return await message.edit("❌ **目标群组不存在或参数有误**")
|
|
|
|
|
group_id = group_info.id
|
|
|
|
|
group_name = group_info.title
|
|
|
|
|
|
2023-07-01 12:18:58 +00:00
|
|
|
|
if message.parameter[0] == "block":
|
2023-07-01 11:58:35 +00:00
|
|
|
|
if hasBlocked := sqlite.get(f"AutoSendReactionsBlock.{group_id}"):
|
|
|
|
|
await edit_delete(
|
2023-07-01 12:18:58 +00:00
|
|
|
|
message, f"❌ 已经将 __{group_name}__ 加入自动回复Emoji黑名单群组了哦~"
|
|
|
|
|
)
|
2023-07-01 11:58:35 +00:00
|
|
|
|
else:
|
2023-07-01 12:18:58 +00:00
|
|
|
|
sqlite[f"AutoSendReactionsBlock.{group_id}"] = "yes"
|
|
|
|
|
await edit_delete(message, f"✅ 已将 __{group_name}__ 加入至自动回复Emoji黑名单群组")
|
|
|
|
|
elif message.parameter[0] == "unblock":
|
2023-07-01 11:58:35 +00:00
|
|
|
|
if hasBlocked := sqlite.get(f"AutoSendReactionsBlock.{group_id}"):
|
|
|
|
|
del sqlite[f"AutoSendReactionsBlock.{group_id}"]
|
2023-07-01 12:18:58 +00:00
|
|
|
|
await edit_delete(message, f"✅ 已将 __{group_name}__ 从自动回复Emoji黑名单群组中移除")
|
2023-07-01 11:58:35 +00:00
|
|
|
|
else:
|
|
|
|
|
await edit_delete(
|
2023-07-01 12:18:58 +00:00
|
|
|
|
message, f"❌ 还没有将 __{group_name}__ 加入进自动回复Emoji群组黑名单哦~"
|
|
|
|
|
)
|
2023-07-01 11:58:35 +00:00
|
|
|
|
|
|
|
|
|
else:
|
2023-07-01 12:18:58 +00:00
|
|
|
|
return await message.edit(f"{lang('error_prefix')}{lang('arg_error')}")
|
2023-07-01 11:58:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@listener(is_plugin=False, incoming=True, ignore_edited=True)
|
|
|
|
|
async def AutoSendReactions(message: Message):
|
2023-07-01 12:18:58 +00:00
|
|
|
|
from_user = ""
|
2023-07-01 11:58:35 +00:00
|
|
|
|
try:
|
|
|
|
|
# 判断是否启用了本插件
|
|
|
|
|
if not sqlite.get("AutoSendReactions.Enable"):
|
|
|
|
|
return
|
2023-07-01 12:18:58 +00:00
|
|
|
|
if "GROUP" not in str(message.chat.type):
|
2023-07-01 11:58:35 +00:00
|
|
|
|
return
|
|
|
|
|
# 判断是否在黑名单中
|
|
|
|
|
if sqlite.get(f"AutoSendReactionsBlock.{message.chat.id}"):
|
|
|
|
|
return
|
|
|
|
|
if not message.from_user:
|
|
|
|
|
# 过滤匿名管理员
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
from_user = message.from_user
|
|
|
|
|
if not sqlite.get(f"AutoSendReactions.{from_user.id}"):
|
|
|
|
|
return
|
|
|
|
|
# 判断群组是否启用了表情回应功能
|
|
|
|
|
group_info = await bot.get_chat(chat_id=message.chat.id)
|
|
|
|
|
if not group_info.available_reactions:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
# 发送表情
|
2023-07-01 12:18:58 +00:00
|
|
|
|
emoji = sqlite.get(f"AutoSendReactions.{from_user.id}").split("|")[0]
|
2023-07-01 11:58:35 +00:00
|
|
|
|
user_name = (
|
2023-07-01 12:18:58 +00:00
|
|
|
|
f"{from_user.first_name} {from_user.last_name}"
|
2023-07-01 11:58:35 +00:00
|
|
|
|
if from_user.last_name
|
|
|
|
|
else from_user.first_name
|
|
|
|
|
)
|
|
|
|
|
try:
|
|
|
|
|
await bot.send_reaction(message.chat.id, message.id, emoji)
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
errorMsg = f"❌ 自动回复Emoji失败({user_name} {emoji})> {e}"
|
|
|
|
|
await log(errorMsg)
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
# 打印日志
|
|
|
|
|
# text = message.text.markdown
|
|
|
|
|
# await log(f"AutoSendReactions 监控到来自 {user_name} 的消息:{str(text)}")
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
errorMsg = f"❌ 第{e.__traceback__.tb_lineno}行:{e}"
|
|
|
|
|
await log(errorMsg)
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## ⬆️ 不懂勿动 ⬆️
|