2021-10-08 11:54:27 +00:00
|
|
|
|
import asyncio
|
|
|
|
|
import logging
|
|
|
|
|
import os
|
2021-11-05 14:08:51 +00:00
|
|
|
|
import re
|
2021-10-08 11:54:27 +00:00
|
|
|
|
|
2021-11-12 14:25:53 +00:00
|
|
|
|
from aiocqhttp import Event
|
|
|
|
|
|
2021-10-15 17:52:40 +00:00
|
|
|
|
from config import Config
|
2021-10-08 11:54:27 +00:00
|
|
|
|
from core.bots.aiocqhttp.client import bot
|
|
|
|
|
from core.bots.aiocqhttp.message import MessageSession, FetchTarget
|
2021-11-16 14:19:48 +00:00
|
|
|
|
from core.bots.aiocqhttp.message_guild import MessageSession as MessageSessionGuild
|
2021-10-08 11:54:27 +00:00
|
|
|
|
from core.bots.aiocqhttp.tasks import MessageTaskManager, FinishedTasks
|
2021-10-14 15:29:26 +00:00
|
|
|
|
from core.elements import MsgInfo, Session, StartUp, Schedule, EnableDirtyWordCheck, PrivateAssets
|
2021-10-14 15:18:47 +00:00
|
|
|
|
from core.loader import ModulesManager
|
2021-10-08 11:54:27 +00:00
|
|
|
|
from core.parser.message import parser
|
|
|
|
|
from core.scheduler import Scheduler
|
2021-10-14 15:29:26 +00:00
|
|
|
|
from core.utils import init, load_prompt
|
2021-10-16 16:17:21 +00:00
|
|
|
|
from database import BotDBUtil
|
|
|
|
|
from database.logging_message import UnfriendlyActions
|
|
|
|
|
|
2021-10-08 11:54:27 +00:00
|
|
|
|
PrivateAssets.set(os.path.abspath(os.path.dirname(__file__) + '/assets'))
|
2021-10-11 14:45:28 +00:00
|
|
|
|
EnableDirtyWordCheck.status = True
|
2021-10-08 11:54:27 +00:00
|
|
|
|
init()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@bot.on_startup
|
|
|
|
|
async def startup():
|
|
|
|
|
gather_list = []
|
2021-10-14 15:18:47 +00:00
|
|
|
|
Modules = ModulesManager.return_modules_list_as_dict()
|
2021-10-08 11:54:27 +00:00
|
|
|
|
for x in Modules:
|
2021-10-14 14:49:12 +00:00
|
|
|
|
if isinstance(Modules[x], StartUp):
|
2021-10-08 11:54:27 +00:00
|
|
|
|
gather_list.append(asyncio.ensure_future(Modules[x].function(FetchTarget)))
|
2021-10-14 14:49:12 +00:00
|
|
|
|
elif isinstance(Modules[x], Schedule):
|
2021-10-08 11:54:27 +00:00
|
|
|
|
Scheduler.add_job(func=Modules[x].function, trigger=Modules[x].trigger, args=[FetchTarget])
|
|
|
|
|
await asyncio.gather(*gather_list)
|
|
|
|
|
Scheduler.start()
|
|
|
|
|
logging.getLogger('apscheduler.executors.default').setLevel(logging.WARNING)
|
2021-10-09 13:08:18 +00:00
|
|
|
|
bot.logger.setLevel(logging.WARNING)
|
2022-01-13 15:50:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@bot.on_websocket_connection
|
|
|
|
|
async def _(event: Event):
|
2021-10-08 11:54:27 +00:00
|
|
|
|
await load_prompt(FetchTarget)
|
|
|
|
|
|
|
|
|
|
|
2021-11-16 14:19:48 +00:00
|
|
|
|
@bot.on_message('group', 'private')
|
2021-10-08 11:54:27 +00:00
|
|
|
|
async def _(event: Event):
|
2021-11-25 15:40:30 +00:00
|
|
|
|
if event.detail_type == 'private':
|
|
|
|
|
if event.sub_type == 'group':
|
|
|
|
|
return await bot.send(event, '请先添加好友后再进行命令交互。')
|
2021-11-06 12:59:35 +00:00
|
|
|
|
filter_msg = re.match(r'.*?\[CQ:(?:json|xml).*?].*?|.*?<\?xml.*?>.*?', event.message)
|
2021-11-05 14:08:51 +00:00
|
|
|
|
if filter_msg:
|
|
|
|
|
return
|
2021-10-08 11:54:27 +00:00
|
|
|
|
all_tsk = MessageTaskManager.get()
|
|
|
|
|
user_id = event.user_id
|
|
|
|
|
if user_id in all_tsk:
|
|
|
|
|
FinishedTasks.add_task(user_id, event.message)
|
|
|
|
|
all_tsk[user_id].set()
|
|
|
|
|
MessageTaskManager.del_task(user_id)
|
|
|
|
|
targetId = 'QQ|' + (f'Group|{str(event.group_id)}' if event.detail_type == 'group' else str(event.user_id))
|
|
|
|
|
msg = MessageSession(MsgInfo(targetId=targetId,
|
|
|
|
|
senderId=f'QQ|{str(event.user_id)}',
|
|
|
|
|
targetFrom='QQ|Group' if event.detail_type == 'group' else 'QQ',
|
|
|
|
|
senderFrom='QQ', senderName=''), Session(message=event,
|
|
|
|
|
target=event.group_id if event.detail_type == 'group' else event.user_id,
|
|
|
|
|
sender=event.user_id))
|
|
|
|
|
await parser(msg)
|
|
|
|
|
|
|
|
|
|
|
2021-11-19 16:40:47 +00:00
|
|
|
|
class GuildAccountInfo:
|
|
|
|
|
tiny_id = None
|
|
|
|
|
|
|
|
|
|
|
2021-11-16 14:19:48 +00:00
|
|
|
|
@bot.on_message('guild')
|
|
|
|
|
async def _(event):
|
2021-11-19 16:40:47 +00:00
|
|
|
|
if GuildAccountInfo.tiny_id is None:
|
|
|
|
|
profile = await bot.call_action('get_guild_service_profile')
|
|
|
|
|
GuildAccountInfo.tiny_id = profile['tiny_id']
|
2021-11-16 14:19:48 +00:00
|
|
|
|
tiny_id = event.user_id
|
2021-11-19 16:40:47 +00:00
|
|
|
|
if tiny_id == GuildAccountInfo.tiny_id:
|
|
|
|
|
return
|
|
|
|
|
all_tsk = MessageTaskManager.guild_get()
|
2021-11-16 14:19:48 +00:00
|
|
|
|
if tiny_id in all_tsk:
|
|
|
|
|
FinishedTasks.add_guild_task(tiny_id, event.message)
|
|
|
|
|
all_tsk[tiny_id].set()
|
|
|
|
|
MessageTaskManager.del_guild_task(tiny_id)
|
|
|
|
|
msg = MessageSessionGuild(MsgInfo(targetId=f'QQ|Guild|{str(event.guild_id)}|{str(event.channel_id)}',
|
|
|
|
|
senderId=f'QQ|Tiny|{str(event.user_id)}',
|
|
|
|
|
targetFrom='QQ|Guild',
|
|
|
|
|
senderFrom='QQ|Tiny', senderName=''),
|
|
|
|
|
Session(message=event,
|
|
|
|
|
target=f'{str(event.guild_id)}|{str(event.channel_id)}',
|
|
|
|
|
sender=event.user_id))
|
|
|
|
|
await parser(msg)
|
|
|
|
|
|
|
|
|
|
|
2021-10-08 11:54:27 +00:00
|
|
|
|
@bot.on('request.friend')
|
|
|
|
|
async def _(event: Event):
|
2021-11-15 16:26:11 +00:00
|
|
|
|
if BotDBUtil.SenderInfo('QQ|' + str(event.user_id)).query.isInBlockList:
|
2021-10-16 16:17:21 +00:00
|
|
|
|
return {'approve': False}
|
2021-10-08 11:54:27 +00:00
|
|
|
|
return {'approve': True}
|
|
|
|
|
|
|
|
|
|
|
2021-11-10 05:00:03 +00:00
|
|
|
|
@bot.on('request.group.invite')
|
|
|
|
|
async def _(event: Event):
|
|
|
|
|
await bot.send_private_msg(user_id=event.user_id,
|
|
|
|
|
message='你好!本机器人暂时不主动同意入群请求。\n'
|
2021-11-20 15:30:03 +00:00
|
|
|
|
'请至https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=New&template=add_new_group.yaml&title=%5BNEW%5D%3A+申请入群。')
|
2021-11-10 05:00:03 +00:00
|
|
|
|
|
|
|
|
|
|
2021-10-16 16:17:21 +00:00
|
|
|
|
@bot.on_notice('group_ban')
|
|
|
|
|
async def _(event: Event):
|
|
|
|
|
if event.user_id == int(Config("qq_account")):
|
|
|
|
|
if event.duration >= 259200:
|
|
|
|
|
result = True
|
|
|
|
|
else:
|
|
|
|
|
result = UnfriendlyActions(targetId=event.group_id, senderId=event.operator_id).add_and_check('mute')
|
|
|
|
|
if result:
|
|
|
|
|
await bot.call_action('set_group_leave', group_id=event.group_id)
|
2021-11-15 16:26:11 +00:00
|
|
|
|
BotDBUtil.SenderInfo('QQ|' + str(event.operator_id)).edit('isInBlockList', True)
|
2021-10-16 16:17:21 +00:00
|
|
|
|
await bot.call_action('delete_friend', friend_id=event.operator_id)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
@bot.on_message('group')
|
|
|
|
|
async def _(event: Event):
|
2021-11-15 16:26:11 +00:00
|
|
|
|
result = BotDBUtil.isGroupInAllowList(f'QQ|Group|{str(event.group_id)}')
|
2021-10-16 16:17:21 +00:00
|
|
|
|
if not result:
|
|
|
|
|
await bot.send(event=event, message='此群不在白名单中,已自动退群。'
|
|
|
|
|
'\n如需申请白名单,请至https://github.com/Teahouse-Studios/bot/issues/new/choose发起issue。')
|
|
|
|
|
await bot.call_action('set_group_leave', group_id=event.group_id)
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
qq_host = Config("qq_host")
|
|
|
|
|
if qq_host:
|
|
|
|
|
host, port = qq_host.split(':')
|
|
|
|
|
bot.run(host=host, port=port, debug=False)
|