feat: 支持检测群内禁言

This commit is contained in:
Rock Chin
2023-04-24 10:34:51 +08:00
parent 5b96ac122f
commit 3cb49fe2d8
3 changed files with 24 additions and 14 deletions
+1 -10
View File
@@ -97,16 +97,7 @@ class QQBotManager:
elif config.msg_source_adapter == 'nakuru': elif config.msg_source_adapter == 'nakuru':
from pkg.qqbot.sources.nakuru import NakuruProjectAdapter from pkg.qqbot.sources.nakuru import NakuruProjectAdapter
self.adapter = NakuruProjectAdapter(config.nakuru_config) self.adapter = NakuruProjectAdapter(config.nakuru_config)
# nakuru库有bug,这个接口没法带access_token,会失败 self.bot_account_id = self.adapter.bot_account_id
# 所以目前自行发请求
import requests
resp = requests.get(
url="http://{}:{}/get_login_info".format(config.nakuru_config['host'], config.nakuru_config['http_port']),
headers={
'Authorization': "Bearer " + config.nakuru_config['token'] if 'token' in config.nakuru_config else ""
}
)
self.bot_account_id = int(resp.json()['data']['user_id'])
else: else:
self.adapter = pkg.utils.context.get_qqbot_manager().adapter self.adapter = pkg.utils.context.get_qqbot_manager().adapter
+2 -1
View File
@@ -66,7 +66,8 @@ def process_message(launcher_type: str, launcher_id: int, text_message: str, mes
# 检查是否被禁言 # 检查是否被禁言
if launcher_type == 'group': if launcher_type == 'group':
if mgr.adapter.is_muted(launcher_id): is_muted = mgr.adapter.is_muted(launcher_id)
if is_muted:
logging.info("机器人被禁言,跳过消息处理(group_{})".format(launcher_id)) logging.info("机器人被禁言,跳过消息处理(group_{})".format(launcher_id))
return reply return reply
+21 -3
View File
@@ -12,6 +12,7 @@ import json
class NakuruProjectMessageConverter(MessageConverter): class NakuruProjectMessageConverter(MessageConverter):
"""消息转换器"""
@staticmethod @staticmethod
def yiri2target(message_chain: mirai.MessageChain) -> list: def yiri2target(message_chain: mirai.MessageChain) -> list:
msg_list = [] msg_list = []
@@ -50,6 +51,7 @@ class NakuruProjectMessageConverter(MessageConverter):
@staticmethod @staticmethod
def target2yiri(message_chain: typing.Any) -> mirai.MessageChain: def target2yiri(message_chain: typing.Any) -> mirai.MessageChain:
"""将Yiri的消息链转换为YiriMirai的消息链"""
assert type(message_chain) is list assert type(message_chain) is list
yiri_msg_list = [] yiri_msg_list = []
@@ -71,6 +73,7 @@ class NakuruProjectMessageConverter(MessageConverter):
class NakuruProjectEventConverter(EventConverter): class NakuruProjectEventConverter(EventConverter):
"""事件转换器"""
@staticmethod @staticmethod
def yiri2target(event: typing.Type[mirai.Event]): def yiri2target(event: typing.Type[mirai.Event]):
if event is mirai.GroupMessage: if event is mirai.GroupMessage:
@@ -127,16 +130,29 @@ class NakuruProjectEventConverter(EventConverter):
class NakuruProjectAdapter(MessageSourceAdapter): class NakuruProjectAdapter(MessageSourceAdapter):
"""nakuru-project适配器""" """nakuru-project适配器"""
bot: nakuru.CQHTTP bot: nakuru.CQHTTP
bot_account_id: int
message_converter: NakuruProjectMessageConverter = NakuruProjectMessageConverter() message_converter: NakuruProjectMessageConverter = NakuruProjectMessageConverter()
event_converter: NakuruProjectEventConverter = NakuruProjectEventConverter() event_converter: NakuruProjectEventConverter = NakuruProjectEventConverter()
listener_list: list[dict] listener_list: list[dict]
def __init__(self, config: dict): def __init__(self, cfg: dict):
"""初始化nakuru-project的对象""" """初始化nakuru-project的对象"""
self.bot = nakuru.CQHTTP(**config) self.bot = nakuru.CQHTTP(**cfg)
self.listener_list = [] self.listener_list = []
# nakuru库有bug,这个接口没法带access_token,会失败
# 所以目前自行发请求
import config
import requests
resp = requests.get(
url="http://{}:{}/get_login_info".format(config.nakuru_config['host'], config.nakuru_config['http_port']),
headers={
'Authorization': "Bearer " + config.nakuru_config['token'] if 'token' in config.nakuru_config else ""
},
timeout=5
)
self.bot_account_id = int(resp.json()['data']['user_id'])
def send_message( def send_message(
self, self,
@@ -178,7 +194,9 @@ class NakuruProjectAdapter(MessageSourceAdapter):
asyncio.run(task) asyncio.run(task)
def is_muted(self, group_id: int) -> bool: def is_muted(self, group_id: int) -> bool:
return False import time
group_member_info = asyncio.run(self.bot.getGroupMemberInfo(group_id, self.bot_account_id))
return group_member_info.shut_up_timestamp > int(time.time())
def register_listener( def register_listener(
self, self,