add MessageChain elements
This commit is contained in:
parent
4be1c8b65e
commit
2af03986e1
13 changed files with 251 additions and 251 deletions
|
@ -12,9 +12,8 @@ from core.bots.aiocqhttp.tasks import MessageTaskManager, FinishedTasks
|
|||
from core.bots.aiocqhttp.message_guild import MessageSession as MessageSessionGuild
|
||||
from core.elements import Plain, Image, MessageSession as MS, MsgInfo, Session, Voice, FetchTarget as FT, \
|
||||
ExecutionLockList
|
||||
from core.elements.message.internal import Embed
|
||||
from core.elements.message.chain import MessageChain
|
||||
from core.elements.others import confirm_command
|
||||
from core.secret_check import Secret
|
||||
from core.logger import Logger
|
||||
from database import BotDBUtil
|
||||
|
||||
|
@ -39,36 +38,18 @@ class MessageSession(MS):
|
|||
msg = MessageSegment.text('')
|
||||
if quote and self.target.targetFrom == 'QQ|Group':
|
||||
msg = MessageSegment.reply(self.session.message.message_id)
|
||||
if Secret.find(msgchain):
|
||||
msgchain = MessageChain(msgchain)
|
||||
if not msgchain.is_safe:
|
||||
return await self.sendMessage('https://wdf.ink/6Oup')
|
||||
if isinstance(msgchain, (Plain, Image, Voice)):
|
||||
msgchain = [msgchain]
|
||||
if isinstance(msgchain, Embed):
|
||||
msgchain = msgchain.to_msgchain()
|
||||
if isinstance(msgchain, str):
|
||||
msg = msg + (MessageSegment.text(msgchain if msgchain != '' else
|
||||
'发生错误:机器人尝试发送空文本消息,请联系机器人开发者解决问题。'
|
||||
'\n错误汇报地址:https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+'))
|
||||
elif isinstance(msgchain, (list, tuple)):
|
||||
count = 0
|
||||
for x in msgchain:
|
||||
if isinstance(x, Plain):
|
||||
msg = msg + MessageSegment.text(('\n' if count != 0 else '') + x.text)
|
||||
elif isinstance(x, Image):
|
||||
msg = msg + MessageSegment.image(Path(await x.get()).as_uri())
|
||||
elif isinstance(x, Voice):
|
||||
msg = msg + MessageSegment.record(Path(x.path).as_uri())
|
||||
elif isinstance(x, Embed):
|
||||
chains = x.to_msgchain()
|
||||
for y in chains:
|
||||
if isinstance(y, Plain):
|
||||
msg = msg + MessageSegment.text(('\n' if count != 0 else '') + y.text)
|
||||
elif isinstance(y, Image):
|
||||
msg = msg + MessageSegment.image(Path(await y.get()).as_uri())
|
||||
count += 1
|
||||
else:
|
||||
msg = msg + MessageSegment.text('发生错误:机器人尝试发送非法消息链,请联系机器人开发者解决问题。'
|
||||
'\n错误汇报地址:https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+')
|
||||
count = 0
|
||||
for x in msgchain.asSendable(embed=False):
|
||||
if isinstance(x, Plain):
|
||||
msg = msg + MessageSegment.text(('\n' if count != 0 else '') + x.text)
|
||||
elif isinstance(x, Image):
|
||||
msg = msg + MessageSegment.image(Path(await x.get()).as_uri())
|
||||
elif isinstance(x, Voice):
|
||||
msg = msg + MessageSegment.record(Path(x.path).as_uri())
|
||||
count += 1
|
||||
Logger.info(f'[Bot] -> [{self.target.targetId}]: {msg}')
|
||||
if self.target.targetFrom == 'QQ|Group':
|
||||
send = await bot.send_group_msg(group_id=self.session.target, message=msg)
|
||||
|
|
|
@ -8,9 +8,9 @@ from aiocqhttp import MessageSegment
|
|||
from core.bots.aiocqhttp.client import bot
|
||||
from core.bots.aiocqhttp.tasks import MessageTaskManager, FinishedTasks
|
||||
from core.elements import Plain, Image, MessageSession as MS, MsgInfo, Session, ExecutionLockList
|
||||
from core.elements.message.chain import MessageChain
|
||||
from core.elements.others import confirm_command
|
||||
from core.logger import Logger
|
||||
from core.secret_check import Secret
|
||||
|
||||
|
||||
def convert2lst(s) -> list:
|
||||
|
@ -33,25 +33,18 @@ class MessageSession(MS):
|
|||
msg = MessageSegment.text('')
|
||||
# if quote:
|
||||
# msg = MessageSegment.reply(self.session.message.message_id)
|
||||
if Secret.find(msgchain):
|
||||
msgchain = MessageChain(msgchain)
|
||||
if not msgchain.is_safe:
|
||||
return await self.sendMessage('https://wdf.ink/6Oup')
|
||||
if isinstance(msgchain, str):
|
||||
msg = msg + (MessageSegment.text(msgchain if msgchain != '' else
|
||||
'发生错误:机器人尝试发送空文本消息,请联系机器人开发者解决问题。'
|
||||
'\n错误汇报地址:https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=5678.md&title='))
|
||||
elif isinstance(msgchain, (list, tuple)):
|
||||
count = 0
|
||||
for x in msgchain:
|
||||
if isinstance(x, Plain):
|
||||
msg = msg + MessageSegment.text(('\n' if count != 0 else '') + x.text)
|
||||
elif isinstance(x, Image):
|
||||
msg = msg + MessageSegment.image(Path(await x.get()).as_uri())
|
||||
# elif isinstance(x, Voice):
|
||||
# msg = msg + MessageSegment.record(Path(x.path).as_uri())
|
||||
count += 1
|
||||
else:
|
||||
msg = msg + MessageSegment.text('发生错误:机器人尝试发送非法消息链,请联系机器人开发者解决问题。'
|
||||
'\n错误汇报地址:https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=5678.md&title=')
|
||||
count = 0
|
||||
for x in msgchain.asSendable(embed=False):
|
||||
if isinstance(x, Plain):
|
||||
msg = msg + MessageSegment.text(('\n' if count != 0 else '') + x.text)
|
||||
elif isinstance(x, Image):
|
||||
msg = msg + MessageSegment.image(Path(await x.get()).as_uri())
|
||||
# elif isinstance(x, Voice):
|
||||
# msg = msg + MessageSegment.record(Path(x.path).as_uri())
|
||||
count += 1
|
||||
Logger.info(f'[Bot] -> [{self.target.targetId}]: {msg}')
|
||||
Logger.info(self.session.target)
|
||||
match_guild = re.match(r'(.*)\|(.*)', self.session.target)
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
import asyncio
|
||||
import re
|
||||
import traceback
|
||||
from typing import List
|
||||
from typing import List, Union
|
||||
|
||||
from core.bots.aiogram.client import dp, bot
|
||||
from core.bots.aiogram.tasks import MessageTaskManager, FinishedTasks
|
||||
from core.elements import Plain, Image, MessageSession as MS, MsgInfo, Session, Voice, FetchTarget as FT, \
|
||||
ExecutionLockList
|
||||
from core.elements.message.internal import Embed
|
||||
from core.elements.message.chain import MessageChain
|
||||
from core.elements.others import confirm_command
|
||||
from core.secret_check import Secret
|
||||
from database import BotDBUtil
|
||||
|
||||
|
||||
|
@ -30,57 +29,32 @@ class MessageSession(MS):
|
|||
delete = True
|
||||
|
||||
async def sendMessage(self, msgchain, quote=True):
|
||||
if Secret.find(msgchain):
|
||||
msgchain = MessageChain(msgchain)
|
||||
if not msgchain.is_safe:
|
||||
return await self.sendMessage('https://wdf.ink/6Oup')
|
||||
if isinstance(msgchain, (Plain, Image, Voice)):
|
||||
msgchain = [msgchain]
|
||||
if isinstance(msgchain, Embed):
|
||||
msgchain = msgchain.to_msgchain()
|
||||
if isinstance(msgchain, str):
|
||||
if msgchain == '':
|
||||
msgchain = '发生错误:机器人尝试发送空文本消息,请联系机器人开发者解决问题。\n错误汇报地址:https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+'
|
||||
send = await bot.send_message(self.session.target, msgchain,
|
||||
reply_to_message_id=self.session.message.message_id if quote and self.session.message else None)
|
||||
elif isinstance(msgchain, (list, tuple)):
|
||||
count = 0
|
||||
send = []
|
||||
for x in msgchain:
|
||||
if isinstance(x, Plain):
|
||||
send_ = await bot.send_message(self.session.target, x.text,
|
||||
reply_to_message_id=self.session.message.message_id if quote
|
||||
and count == 0 and self.session.message else None)
|
||||
elif isinstance(x, Image):
|
||||
with open(await x.get(), 'rb') as image:
|
||||
send_ = await bot.send_photo(self.session.target, image,
|
||||
reply_to_message_id=self.session.message.message_id if quote
|
||||
and count == 0
|
||||
and self.session.message else None)
|
||||
elif isinstance(x, Voice):
|
||||
with open(x.path, 'rb') as voice:
|
||||
send_ = await bot.send_audio(self.session.target, voice,
|
||||
reply_to_message_id=self.session.message.message_id if quote
|
||||
and count == 0 and self.session.message else None)
|
||||
elif isinstance(x, Embed):
|
||||
chains = x.to_msgchain()
|
||||
for y in chains:
|
||||
if isinstance(y, Plain):
|
||||
send_ = await bot.send_message(self.session.target, y.text,
|
||||
reply_to_message_id=self.session.message.message_id if quote
|
||||
and count == 0 and self.session.message else None)
|
||||
elif isinstance(y, Image):
|
||||
with open(await y.get(), 'rb') as image:
|
||||
send_ = await bot.send_photo(self.session.target, image,
|
||||
reply_to_message_id=self.session.message.message_id if quote
|
||||
and count == 0 and self.session.message else None)
|
||||
else:
|
||||
send_ = False
|
||||
if send_:
|
||||
send.append(send_)
|
||||
count += 1
|
||||
else:
|
||||
msgchain = '发生错误:机器人尝试发送非法消息链,请联系机器人开发者解决问题。\n错误汇报地址:https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+'
|
||||
send = await bot.send_message(self.session.target, msgchain,
|
||||
reply_to_message_id=self.session.message.message_id if quote and self.session.message else None)
|
||||
count = 0
|
||||
send = []
|
||||
for x in msgchain.asSendable(embed=False):
|
||||
if isinstance(x, Plain):
|
||||
send_ = await bot.send_message(self.session.target, x.text,
|
||||
reply_to_message_id=self.session.message.message_id if quote
|
||||
and count == 0 and self.session.message else None)
|
||||
elif isinstance(x, Image):
|
||||
with open(await x.get(), 'rb') as image:
|
||||
send_ = await bot.send_photo(self.session.target, image,
|
||||
reply_to_message_id=self.session.message.message_id if quote
|
||||
and count == 0
|
||||
and self.session.message else None)
|
||||
elif isinstance(x, Voice):
|
||||
with open(x.path, 'rb') as voice:
|
||||
send_ = await bot.send_audio(self.session.target, voice,
|
||||
reply_to_message_id=self.session.message.message_id if quote
|
||||
and count == 0 and self.session.message else None)
|
||||
else:
|
||||
send_ = False
|
||||
if send_:
|
||||
send.append(send_)
|
||||
count += 1
|
||||
return MessageSession(target=MsgInfo(targetId=0, senderId=0, senderName='', targetFrom='Telegram|Bot',
|
||||
senderFrom='Telegram|Bot'),
|
||||
session=Session(message=send, target=send, sender=send))
|
||||
|
@ -144,7 +118,7 @@ class MessageSession(MS):
|
|||
|
||||
class FetchTarget(FT):
|
||||
@staticmethod
|
||||
async def fetch_target(targetId) -> MessageSession:
|
||||
async def fetch_target(targetId) -> Union[MessageSession, bool]:
|
||||
matchChannel = re.match(r'^(Telegram\|.*?)\|(.*)', targetId)
|
||||
if matchChannel:
|
||||
return MessageSession(MsgInfo(targetId=targetId, senderId=targetId, senderName='',
|
||||
|
|
|
@ -2,17 +2,15 @@ import asyncio
|
|||
import datetime
|
||||
import re
|
||||
import traceback
|
||||
from typing import List
|
||||
from typing import List, Union
|
||||
|
||||
import discord
|
||||
from pathlib import Path
|
||||
|
||||
from core.bots.discord.client import client
|
||||
from core.elements import Plain, Image, MessageSession as MS, MsgInfo, Session, FetchTarget as FT, ExecutionLockList, \
|
||||
Voice
|
||||
from core.elements.message.internal import Embed, EmbedField
|
||||
from core.elements import Plain, Image, MessageSession as MS, MsgInfo, Session, FetchTarget as FT, ExecutionLockList
|
||||
from core.elements.message.chain import MessageChain
|
||||
from core.elements.message.internal import Embed
|
||||
from core.elements.others import confirm_command
|
||||
from core.secret_check import Secret
|
||||
from database import BotDBUtil
|
||||
|
||||
|
||||
|
@ -31,7 +29,8 @@ async def convert_embed(embed: Embed) -> discord.Embed:
|
|||
description=embed.description if embed.description is not None else discord.Embed.Empty,
|
||||
color=embed.color if embed.color is not None else discord.Embed.Empty,
|
||||
url=embed.url if embed.url is not None else discord.Embed.Empty,
|
||||
timestamp=datetime.datetime.fromtimestamp(embed.timestamp) if embed.timestamp is not None else discord.Embed.Empty,)
|
||||
timestamp=datetime.datetime.fromtimestamp(
|
||||
embed.timestamp) if embed.timestamp is not None else discord.Embed.Empty, )
|
||||
""" if embed.image is not None:
|
||||
embeds.set_image(url=Path(await embed.image.get()).as_uri())
|
||||
if embed.thumbnail is not None:
|
||||
|
@ -54,43 +53,29 @@ class MessageSession(MS):
|
|||
delete = True
|
||||
|
||||
async def sendMessage(self, msgchain, quote=True):
|
||||
if Secret.find(msgchain):
|
||||
msgchain = MessageChain(msgchain)
|
||||
if not msgchain.is_safe:
|
||||
return await self.sendMessage('https://wdf.ink/6Oup')
|
||||
if isinstance(msgchain, (Plain, Image, Voice)):
|
||||
msgchain = [msgchain]
|
||||
if isinstance(msgchain, Embed):
|
||||
send = await self.session.target.send(embed=await convert_embed(msgchain),
|
||||
reference=self.session.message if quote and self.session.message else None)
|
||||
elif isinstance(msgchain, str):
|
||||
if msgchain == '':
|
||||
msgchain = '发生错误:机器人尝试发送空文本消息,请联系机器人开发者解决问题。\n错误汇报地址:https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+'
|
||||
send = await self.session.target.send(msgchain,
|
||||
reference=self.session.message if quote and self.session.message else None)
|
||||
elif isinstance(msgchain, (list, tuple)):
|
||||
count = 0
|
||||
send = []
|
||||
for x in msgchain:
|
||||
if isinstance(x, Plain):
|
||||
send_ = await self.session.target.send(x.text,
|
||||
reference=self.session.message if quote and count == 0
|
||||
and self.session.message else None)
|
||||
elif isinstance(x, Image):
|
||||
send_ = await self.session.target.send(file=discord.File(await x.get()),
|
||||
reference=self.session.message if quote and count == 0
|
||||
and self.session.message else None)
|
||||
elif isinstance(x, Embed):
|
||||
send_ = await self.session.target.send(embed=await convert_embed(x),
|
||||
reference=self.session.message if quote and count == 0
|
||||
and self.session.message else None)
|
||||
else:
|
||||
send_ = False
|
||||
if send_:
|
||||
send.append(send_)
|
||||
count += 1
|
||||
else:
|
||||
msgchain = '发生错误:机器人尝试发送非法消息链,请联系机器人开发者解决问题。\n错误汇报地址:https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+'
|
||||
send = await self.session.target.send(msgchain,
|
||||
reference=self.session.message if quote and self.session.message else None)
|
||||
count = 0
|
||||
send = []
|
||||
for x in msgchain.asSendable():
|
||||
if isinstance(x, Plain):
|
||||
send_ = await self.session.target.send(x.text,
|
||||
reference=self.session.message if quote and count == 0
|
||||
and self.session.message else None)
|
||||
elif isinstance(x, Image):
|
||||
send_ = await self.session.target.send(file=discord.File(await x.get()),
|
||||
reference=self.session.message if quote and count == 0
|
||||
and self.session.message else None)
|
||||
elif isinstance(x, Embed):
|
||||
send_ = await self.session.target.send(embed=await convert_embed(x),
|
||||
reference=self.session.message if quote and count == 0
|
||||
and self.session.message else None)
|
||||
else:
|
||||
send_ = False
|
||||
if send_:
|
||||
send.append(send_)
|
||||
count += 1
|
||||
return MessageSession(target=MsgInfo(targetId=0, senderId=0, senderName='', targetFrom='Discord|Bot',
|
||||
senderFrom='Discord|Bot'),
|
||||
session=Session(message=send, target=self.session.target, sender=self.session.sender))
|
||||
|
@ -153,7 +138,7 @@ class MessageSession(MS):
|
|||
|
||||
class FetchTarget(FT):
|
||||
@staticmethod
|
||||
async def fetch_target(targetId) -> MessageSession:
|
||||
async def fetch_target(targetId) -> Union[MessageSession, bool]:
|
||||
matchChannel = re.match(r'^(Discord\|(?:DM\||)Channel)\|(.*)', targetId)
|
||||
if matchChannel:
|
||||
getChannel = await client.fetch_channel(int(matchChannel.group(2)))
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from typing import List
|
||||
from typing import List, Union
|
||||
|
||||
|
||||
class MsgInfo:
|
||||
|
|
80
core/elements/message/chain.py
Normal file
80
core/elements/message/chain.py
Normal file
|
@ -0,0 +1,80 @@
|
|||
from .internal import Plain, Image, Voice, Embed
|
||||
from core.elements.others import Secret, ErrorMessage
|
||||
from typing import Union, List, Tuple
|
||||
|
||||
|
||||
class MessageChain:
|
||||
def __init__(self, elements: Union[str, List[Union[Plain, Image, Voice, Embed]],
|
||||
Tuple[Union[Plain, Image, Voice, Embed]],
|
||||
Plain, Image, Voice, Embed]):
|
||||
self.value = []
|
||||
if isinstance(elements, str):
|
||||
if elements != '':
|
||||
self.value.append(Plain(elements))
|
||||
else:
|
||||
self.value.append(
|
||||
Plain(ErrorMessage('机器人尝试发送空文本消息,请联系机器人开发者解决问题。')))
|
||||
elif isinstance(elements, (Plain, Image, Voice, Embed)):
|
||||
self.value.append(elements)
|
||||
elif isinstance(elements, (list, tuple)):
|
||||
for e in elements:
|
||||
if isinstance(e, (Plain, Image, Voice, Embed)):
|
||||
self.value.append(e)
|
||||
else:
|
||||
self.value.append(
|
||||
Plain(ErrorMessage('机器人尝试发送非法消息链,请联系机器人开发者解决问题。')))
|
||||
elif isinstance(elements, MessageChain):
|
||||
self.value = elements.value
|
||||
else:
|
||||
self.value.append(
|
||||
Plain(ErrorMessage('机器人尝试发送非法消息链,请联系机器人开发者解决问题。')))
|
||||
|
||||
@property
|
||||
def is_safe(self):
|
||||
for v in self.value:
|
||||
if isinstance(v, Plain):
|
||||
for secret in Secret.list:
|
||||
if v.text.upper().find(secret.upper()) != -1:
|
||||
return False
|
||||
elif isinstance(v, Embed):
|
||||
for secret in Secret.list:
|
||||
if v.title.upper().find(secret.upper()) != -1:
|
||||
return False
|
||||
if v.description.upper().find(secret.upper()) != -1:
|
||||
return False
|
||||
if v.footer.upper().find(secret.upper()) != -1:
|
||||
return False
|
||||
if v.author.upper().find(secret.upper()) != -1:
|
||||
return False
|
||||
if v.url.upper().find(secret.upper()) != -1:
|
||||
return False
|
||||
for f in v.fields:
|
||||
if f.name.upper().find(secret.upper()) != -1:
|
||||
return False
|
||||
if f.value.upper().find(secret.upper()) != -1:
|
||||
return False
|
||||
return True
|
||||
|
||||
def asSendable(self, embed=True):
|
||||
value = []
|
||||
for x in self.value:
|
||||
if isinstance(x, Embed) and not embed:
|
||||
value.append(x.to_msgchain())
|
||||
else:
|
||||
value.append(x)
|
||||
return value
|
||||
|
||||
def append(self, element):
|
||||
self.value.append(element)
|
||||
|
||||
def remove(self, element):
|
||||
self.value.remove(element)
|
||||
|
||||
def __str__(self):
|
||||
return f'[{", ".join([str(x.__dict__) for x in self.value])}]'
|
||||
|
||||
def __repr__(self):
|
||||
return self.value
|
||||
|
||||
|
||||
__all__ = ["MessageChain"]
|
|
@ -1,12 +1,12 @@
|
|||
import re
|
||||
import uuid
|
||||
from os.path import abspath
|
||||
from typing import List
|
||||
from typing import List, Union
|
||||
|
||||
import aiohttp
|
||||
import filetype
|
||||
from PIL import Image as PImage
|
||||
from aiohttp_retry import ExponentialRetry, RetryClient
|
||||
from tenacity import retry, stop_after_attempt
|
||||
|
||||
from config import CachePath
|
||||
|
||||
|
@ -19,23 +19,26 @@ class Plain:
|
|||
|
||||
class Image:
|
||||
def __init__(self,
|
||||
path):
|
||||
path, headers=None):
|
||||
self.need_get = False
|
||||
self.path = path
|
||||
self.headers = headers
|
||||
if isinstance(path, PImage.Image):
|
||||
savepath = f'{CachePath}{str(uuid.uuid4())}.jpg'
|
||||
path.convert('RGB').save(savepath)
|
||||
self.path = savepath
|
||||
save = f'{CachePath}{str(uuid.uuid4())}.jpg'
|
||||
path.convert('RGB').save(save)
|
||||
self.path = save
|
||||
elif re.match('^https?://.*', path):
|
||||
self.need_get = True
|
||||
|
||||
async def get(self):
|
||||
if self.need_get:
|
||||
return abspath(await self.get_image(self.path))
|
||||
return abspath(await self.get_image())
|
||||
return abspath(self.path)
|
||||
|
||||
async def get_image(self, url, headers=None):
|
||||
async with RetryClient(retry_options=ExponentialRetry(attempts=3)) as session:
|
||||
@retry(stop=stop_after_attempt(3))
|
||||
async def get_image(self):
|
||||
url = self.path
|
||||
async with aiohttp.ClientSession as session:
|
||||
async with session.get(url, timeout=aiohttp.ClientTimeout(total=20)) as req:
|
||||
raw = await req.read()
|
||||
ft = filetype.match(raw).extension
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
import os
|
||||
from configparser import ConfigParser
|
||||
from os.path import abspath
|
||||
import traceback
|
||||
|
||||
import requests
|
||||
|
||||
confirm_command = ["是", "对", '确定', '是吧', '大概是',
|
||||
'也许', '可能', '对的', '是呢', '对呢', '嗯', '嗯呢',
|
||||
|
@ -23,4 +28,47 @@ class PrivateAssets:
|
|||
PrivateAssets.path = path
|
||||
|
||||
|
||||
__all__ = ["confirm_command", "command_prefix", "EnableDirtyWordCheck", "PrivateAssets"]
|
||||
class Secret:
|
||||
list = []
|
||||
|
||||
@staticmethod
|
||||
def add(secret):
|
||||
Secret.list.append(secret)
|
||||
|
||||
|
||||
class ErrorMessage:
|
||||
def __init__(self, error_message):
|
||||
self.error_message = '发生错误:' + error_message \
|
||||
+ '\n错误汇报地址:https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+'
|
||||
|
||||
def __str__(self):
|
||||
return self.error_message
|
||||
|
||||
def __repr__(self):
|
||||
return self.error_message
|
||||
|
||||
|
||||
def load_secret():
|
||||
config_filename = 'config.cfg'
|
||||
config_path = abspath('./config/' + config_filename)
|
||||
cp = ConfigParser()
|
||||
cp.read(config_path)
|
||||
section = cp.sections()[0]
|
||||
options = cp.options(section)
|
||||
for option in options:
|
||||
value = cp.get(section, option)
|
||||
if value != '':
|
||||
Secret.add(value.upper())
|
||||
try:
|
||||
ip = requests.get('https://api.ip.sb/ip', timeout=10)
|
||||
if ip:
|
||||
Secret.add(ip.text.replace('\n', ''))
|
||||
except:
|
||||
traceback.print_exc()
|
||||
pass
|
||||
|
||||
|
||||
load_secret()
|
||||
|
||||
|
||||
__all__ = ["confirm_command", "command_prefix", "EnableDirtyWordCheck", "PrivateAssets", "Secret", "ErrorMessage"]
|
||||
|
|
|
@ -44,7 +44,7 @@ class ModulesManager:
|
|||
modules: Dict[str, Union[Command, Option, Schedule, RegexCommand, StartUp]] = {}
|
||||
|
||||
@staticmethod
|
||||
def add_module(module: [Command, Option, Schedule, RegexCommand, StartUp]):
|
||||
def add_module(module: Union[Command, Option, Schedule, RegexCommand, StartUp]):
|
||||
if module.bind_prefix not in ModulesManager.modules:
|
||||
ModulesManager.modules.update({module.bind_prefix: module})
|
||||
else:
|
||||
|
|
|
@ -1,53 +0,0 @@
|
|||
import traceback
|
||||
from configparser import ConfigParser
|
||||
from os.path import abspath
|
||||
from typing import Union, List
|
||||
|
||||
import requests
|
||||
|
||||
from core.elements import Plain
|
||||
|
||||
|
||||
class Secret:
|
||||
list = []
|
||||
|
||||
@staticmethod
|
||||
def add(secret):
|
||||
Secret.list.append(secret)
|
||||
|
||||
@staticmethod
|
||||
def find(message: Union[str, List]):
|
||||
if isinstance(message, str):
|
||||
for secret in Secret.list:
|
||||
if message.upper().find(secret.upper()) != -1:
|
||||
return True
|
||||
elif isinstance(message, (list, tuple)):
|
||||
for m in message:
|
||||
if isinstance(m, Plain):
|
||||
for secret in Secret.list:
|
||||
if m.text.upper().find(secret.upper()) != -1:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def load_secret():
|
||||
config_filename = 'config.cfg'
|
||||
config_path = abspath('./config/' + config_filename)
|
||||
cp = ConfigParser()
|
||||
cp.read(config_path)
|
||||
section = cp.sections()[0]
|
||||
options = cp.options(section)
|
||||
for option in options:
|
||||
value = cp.get(section, option)
|
||||
if value != '':
|
||||
Secret.add(value.upper())
|
||||
try:
|
||||
ip = requests.get('https://api.ip.sb/ip', timeout=10)
|
||||
if ip:
|
||||
Secret.add(ip.text.replace('\n', ''))
|
||||
except:
|
||||
traceback.print_exc()
|
||||
pass
|
||||
|
||||
|
||||
load_secret()
|
|
@ -4,7 +4,8 @@ from PIL import Image
|
|||
|
||||
from core.elements import MessageSession, Plain, Image as BImage, Session, MsgInfo, FetchTarget as FT, Voice, Embed
|
||||
from core.elements.others import confirm_command
|
||||
from core.secret_check import Secret
|
||||
from core.elements.message.chain import MessageChain
|
||||
from core.logger import Logger
|
||||
|
||||
|
||||
class Template(MessageSession):
|
||||
|
@ -15,33 +16,17 @@ class Template(MessageSession):
|
|||
delete = True
|
||||
|
||||
async def sendMessage(self, msgchain, quote=True) -> MessageSession:
|
||||
if Secret.find(msgchain):
|
||||
return await self.sendMessage('https://wdf.ink/6Oup')
|
||||
if isinstance(msgchain, (Plain, BImage, Voice)):
|
||||
msgchain = [msgchain]
|
||||
if isinstance(msgchain, Embed):
|
||||
msgchain = msgchain.to_msgchain()
|
||||
if isinstance(msgchain, str):
|
||||
print(msgchain)
|
||||
return MessageSession(target=self.target,
|
||||
session=Session(message=msgchain, target='TEST|Console', sender='TEST|Console'))
|
||||
if isinstance(msgchain, list):
|
||||
msg_list = []
|
||||
for x in msgchain:
|
||||
if isinstance(x, Plain):
|
||||
print(x.text)
|
||||
msg_list.append(x.text)
|
||||
if isinstance(x, BImage):
|
||||
img = Image.open(await x.get())
|
||||
img.show()
|
||||
if isinstance(x, Embed):
|
||||
chains = x.to_msgchain()
|
||||
for y in chains:
|
||||
if isinstance(y, Plain):
|
||||
print(y.text)
|
||||
if isinstance(y, BImage):
|
||||
img = Image.open(await y.get())
|
||||
img.show()
|
||||
Logger.info(msgchain)
|
||||
msgchain = MessageChain(msgchain)
|
||||
Logger.info(msgchain)
|
||||
msg_list = []
|
||||
for x in msgchain.asSendable(embed=False):
|
||||
if isinstance(x, Plain):
|
||||
print(x.text)
|
||||
msg_list.append(x.text)
|
||||
if isinstance(x, BImage):
|
||||
img = Image.open(await x.get())
|
||||
img.show()
|
||||
return MessageSession(target=self.target,
|
||||
session=Session(message=str(msg_list), target='TEST|Console', sender='TEST|Console'))
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@ async def slk_converter(filepath: str) -> str:
|
|||
return filepath2
|
||||
|
||||
|
||||
async def load_prompt(bot: FetchTarget) -> None:
|
||||
async def load_prompt(bot) -> None:
|
||||
author_cache = os.path.abspath(PrivateAssets.path + '/cache_restart_author')
|
||||
loader_cache = os.path.abspath(PrivateAssets.path + '/.cache_loader')
|
||||
if os.path.exists(author_cache):
|
||||
|
|
|
@ -375,6 +375,7 @@ async def query_pages(msg: MessageSession, title: Union[str, list, tuple],
|
|||
wait_msg_list = []
|
||||
wait_list = []
|
||||
web_render_list = []
|
||||
dl_list = []
|
||||
for q in query_task:
|
||||
current_task = query_task[q]
|
||||
ready_for_query_pages = current_task['query']
|
||||
|
@ -415,15 +416,7 @@ async def query_pages(msg: MessageSession, title: Union[str, list, tuple],
|
|||
if plain_slice:
|
||||
msg_list.append(Plain('\n'.join(plain_slice)))
|
||||
if r.file is not None:
|
||||
dl = await download_to_cache(r.file)
|
||||
guess_type = filetype.guess(dl)
|
||||
if guess_type is not None:
|
||||
if guess_type.extension in ["png", "gif", "jpg", "jpeg", "webp", "bmp", "ico"]:
|
||||
if msg.Feature.image:
|
||||
msg_list.append(Image(dl))
|
||||
elif guess_type.extension in ["oga", "ogg", "flac", "mp3", "wav"]:
|
||||
if msg.Feature.voice:
|
||||
msg_list.append(Voice(dl))
|
||||
dl_list.append(r.file)
|
||||
else:
|
||||
if msg.Feature.image and r.link is not None:
|
||||
web_render_list.append({r.link: r.info.realurl})
|
||||
|
@ -460,6 +453,17 @@ async def query_pages(msg: MessageSession, title: Union[str, list, tuple],
|
|||
infobox_msg_list.append(Image(get_infobox))
|
||||
if infobox_msg_list:
|
||||
await msg.sendMessage(infobox_msg_list, quote=False)
|
||||
if dl_list:
|
||||
for f in dl_list:
|
||||
dl = await download_to_cache(f)
|
||||
guess_type = filetype.guess(dl)
|
||||
if guess_type is not None:
|
||||
if guess_type.extension in ["png", "gif", "jpg", "jpeg", "webp", "bmp", "ico"]:
|
||||
if msg.Feature.image:
|
||||
await msg.sendMessage(Image(dl), quote=False)
|
||||
elif guess_type.extension in ["oga", "ogg", "flac", "mp3", "wav"]:
|
||||
if msg.Feature.voice:
|
||||
await msg.sendMessage(Voice(dl), quote=False)
|
||||
if wait_msg_list:
|
||||
confirm = await msg.waitConfirm(wait_msg_list)
|
||||
if confirm and wait_list:
|
||||
|
|
Reference in a new issue