mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-08 13:20:01 +08:00
✨ 引用消息同意好友/群组请求 (#1902)
* ✨ 提供event日志表, 新增引用消息同意好友/群组请求 * ⚡ 移除城市列表更新 * ✨ 新增申请入群功能 * 💬 文本修改
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
from nonebot import on_notice, on_request
|
||||
from nonebot import on_notice
|
||||
from nonebot.adapters import Bot
|
||||
from nonebot.adapters.onebot.v11 import (
|
||||
GroupDecreaseNoticeEvent,
|
||||
@@ -14,9 +14,10 @@ from nonebot_plugin_uninfo import Uninfo
|
||||
from zhenxun.builtin_plugins.platform.qq.exception import ForceAddGroupError
|
||||
from zhenxun.configs.config import BotConfig, Config
|
||||
from zhenxun.configs.utils import PluginExtraData, RegisterConfig, Task
|
||||
from zhenxun.models.event_log import EventLog
|
||||
from zhenxun.models.group_console import GroupConsole
|
||||
from zhenxun.utils.common_utils import CommonUtils
|
||||
from zhenxun.utils.enum import PluginType
|
||||
from zhenxun.utils.enum import EventLogType, PluginType
|
||||
from zhenxun.utils.platform import PlatformUtils
|
||||
from zhenxun.utils.rules import notice_rule
|
||||
|
||||
@@ -106,8 +107,6 @@ group_decrease_handle = on_notice(
|
||||
rule=notice_rule([GroupMemberDecreaseEvent, GroupDecreaseNoticeEvent]),
|
||||
)
|
||||
"""群员减少处理"""
|
||||
add_group = on_request(priority=1, block=False)
|
||||
"""加群同意请求"""
|
||||
|
||||
|
||||
@group_increase_handle.handle()
|
||||
@@ -142,7 +141,20 @@ async def _(
|
||||
if event.sub_type == "kick_me":
|
||||
"""踢出Bot"""
|
||||
await GroupManager.kick_bot(bot, group_id, str(event.operator_id))
|
||||
await EventLog.create(
|
||||
user_id=user_id, group_id=group_id, event_type=EventLogType.KICK_BOT
|
||||
)
|
||||
elif event.sub_type in ["leave", "kick"]:
|
||||
if event.sub_type == "leave":
|
||||
"""主动退群"""
|
||||
await EventLog.create(
|
||||
user_id=user_id, group_id=group_id, event_type=EventLogType.LEAVE_MEMBER
|
||||
)
|
||||
else:
|
||||
"""被踢出群"""
|
||||
await EventLog.create(
|
||||
user_id=user_id, group_id=group_id, event_type=EventLogType.KICK_MEMBER
|
||||
)
|
||||
result = await GroupManager.run_user(
|
||||
bot, user_id, group_id, str(event.operator_id), event.sub_type
|
||||
)
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
import asyncio
|
||||
from datetime import datetime
|
||||
import random
|
||||
|
||||
from nonebot.adapters import Bot
|
||||
from nonebot.plugin import PluginMetadata
|
||||
from nonebot.rule import to_me
|
||||
from nonebot_plugin_alconna import Alconna, Args, Arparma, Field, on_alconna
|
||||
from nonebot_plugin_uninfo import Uninfo
|
||||
|
||||
from zhenxun.configs.utils import PluginCdBlock, PluginExtraData
|
||||
from zhenxun.models.fg_request import FgRequest
|
||||
from zhenxun.services.log import logger
|
||||
from zhenxun.utils.depends import UserName
|
||||
from zhenxun.utils.enum import RequestHandleType, RequestType
|
||||
from zhenxun.utils.platform import PlatformUtils
|
||||
|
||||
__plugin_meta__ = PluginMetadata(
|
||||
name="群组申请",
|
||||
description="""
|
||||
一些小群直接邀请入群导致无法正常生成审核请求,需要用该方法手动生成审核请求。
|
||||
当管理员同意同意时会发送消息进行提示,之后再进行拉群不会退出。
|
||||
该消息会发送至管理员,多次发送不存在的群组id或相同群组id可能导致ban。
|
||||
""".strip(),
|
||||
usage="""
|
||||
指令:
|
||||
申请入群 [群号]
|
||||
示例: 申请入群 123123123
|
||||
""".strip(),
|
||||
extra=PluginExtraData(
|
||||
author="HibiKier",
|
||||
version="0.1",
|
||||
menu_type="其他",
|
||||
limits=[PluginCdBlock(cd=300, result="每5分钟只能申请一次哦~")],
|
||||
).to_dict(),
|
||||
)
|
||||
|
||||
|
||||
_matcher = on_alconna(
|
||||
Alconna(
|
||||
"申请入群",
|
||||
Args[
|
||||
"group_id",
|
||||
int,
|
||||
Field(
|
||||
missing_tips=lambda: "请在命令后跟随群组id!",
|
||||
unmatch_tips=lambda _: "群组id必须为数字!",
|
||||
),
|
||||
],
|
||||
),
|
||||
skip_for_unmatch=False,
|
||||
priority=5,
|
||||
block=True,
|
||||
rule=to_me(),
|
||||
)
|
||||
|
||||
|
||||
@_matcher.handle()
|
||||
async def _(
|
||||
bot: Bot, session: Uninfo, arparma: Arparma, group_id: int, uname: str = UserName()
|
||||
):
|
||||
# 旧请求全部设置为过期
|
||||
await FgRequest.filter(
|
||||
request_type=RequestType.GROUP,
|
||||
user_id=session.user.id,
|
||||
group_id=str(group_id),
|
||||
handle_type__isnull=True,
|
||||
).update(handle_type=RequestHandleType.EXPIRE)
|
||||
f = await FgRequest.create(
|
||||
request_type=RequestType.GROUP,
|
||||
platform=PlatformUtils.get_platform(session),
|
||||
bot_id=bot.self_id,
|
||||
flag="0",
|
||||
user_id=session.user.id,
|
||||
nickname=uname,
|
||||
group_id=str(group_id),
|
||||
)
|
||||
results = await PlatformUtils.send_superuser(
|
||||
bot,
|
||||
f"*****一份入群申请*****\n"
|
||||
f"ID:{f.id}\n"
|
||||
f"申请人:{uname}({session.user.id})\n群聊:"
|
||||
f"{group_id}\n邀请日期:{datetime.now().replace(microsecond=0)}\n"
|
||||
"注:该请求为手动申请入群",
|
||||
)
|
||||
if message_ids := [
|
||||
str(r[1].msg_ids[0]["message_id"]) for r in results if r[1] and r[1].msg_ids
|
||||
]:
|
||||
f.message_ids = ",".join(message_ids)
|
||||
await f.save(update_fields=["message_ids"])
|
||||
await asyncio.sleep(random.randint(1, 5))
|
||||
await bot.send_private_msg(
|
||||
user_id=int(session.user.id),
|
||||
message=f"已发送申请,请等待管理员审核,ID:{f.id}。",
|
||||
)
|
||||
logger.info(
|
||||
f"用户 {uname}({session.user.id}) 申请入群 {group_id},ID:{f.id}。",
|
||||
arparma.header_result,
|
||||
session=session,
|
||||
)
|
||||
Reference in New Issue
Block a user