Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/bots/discord/slash_message.py

103 lines
3.6 KiB
Python
Raw Normal View History

2022-08-16 18:53:43 +00:00
import traceback
import discord
from bots.discord.message import convert_embed
from config import Config
2023-02-05 14:33:33 +00:00
from core.builtins import Plain, Image, MessageSession as MS
from core.builtins.message.chain import MessageChain
2023-07-14 11:07:30 +00:00
from core.builtins.message.internal import Embed, ErrorMessage
2022-08-16 18:53:43 +00:00
from core.logger import Logger
2023-02-05 14:33:33 +00:00
from core.types import FinishedSession as FinS
2022-08-16 18:53:43 +00:00
enable_analytics = Config('enable_analytics')
class FinishedSession(FinS):
async def delete(self):
"""
用于删除这条消息
"""
try:
for x in self.result:
await x.delete()
except Exception:
Logger.error(traceback.format_exc())
class MessageSession(MS):
command = ''
class Feature:
image = True
voice = False
embed = True
forward = False
delete = True
quote = False
wait = True
2022-08-27 14:02:26 +00:00
async def sendMessage(self, msgchain, quote=True, disable_secret_check=False, allow_split_image=True
) -> FinishedSession:
2022-08-16 18:53:43 +00:00
msgchain = MessageChain(msgchain)
if not msgchain.is_safe and not disable_secret_check:
2023-07-14 11:07:30 +00:00
return await self.sendMessage(Plain(ErrorMessage(self.locale.t("error.message.chain.unsafe"))))
2022-08-16 18:53:43 +00:00
self.sent.append(msgchain)
count = 0
send = []
2022-08-17 08:21:59 +00:00
first_send = True
2022-08-16 18:53:43 +00:00
for x in msgchain.asSendable():
if isinstance(x, Plain):
2022-08-17 08:21:59 +00:00
if first_send:
send_ = await self.session.message.respond(x.text)
else:
send_ = await self.session.message.send(x.text)
2022-08-16 18:53:43 +00:00
Logger.info(f'[Bot] -> [{self.target.targetId}]: {x.text}')
elif isinstance(x, Image):
2022-08-17 08:21:59 +00:00
if first_send:
send_ = await self.session.message.respond(file=discord.File(await x.get()))
else:
send_ = await self.session.message.send(file=discord.File(await x.get()))
2022-08-16 18:53:43 +00:00
Logger.info(f'[Bot] -> [{self.target.targetId}]: Image: {str(x.__dict__)}')
elif isinstance(x, Embed):
embeds, files = await convert_embed(x)
2022-08-17 08:21:59 +00:00
if first_send:
send_ = await self.session.message.respond(embed=embeds)
else:
send_ = await self.session.message.send(embed=embeds)
2022-08-16 18:53:43 +00:00
Logger.info(f'[Bot] -> [{self.target.targetId}]: Embed: {str(x.__dict__)}')
else:
send_ = False
if send_:
send.append(send_)
count += 1
2022-08-17 08:21:59 +00:00
first_send = False
2022-08-16 18:53:43 +00:00
msgIds = []
for x in send:
msgIds.append(x.id)
2023-02-12 04:53:02 +00:00
return FinishedSession(self, msgIds, send)
2022-08-16 18:53:43 +00:00
async def checkPermission(self):
if self.session.message.channel.permissions_for(self.session.message.author).administrator \
2023-04-30 03:30:59 +00:00
or isinstance(self.session.message.channel, discord.DMChannel) \
or self.target.senderInfo.query.isSuperUser \
or self.target.senderInfo.check_TargetAdmin(self.target.targetId):
2022-08-16 18:53:43 +00:00
return True
return False
async def checkNativePermission(self):
if self.session.message.channel.permissions_for(self.session.message.author).administrator \
2023-04-30 03:30:59 +00:00
or isinstance(self.session.message.channel, discord.DMChannel):
2022-08-16 18:53:43 +00:00
return True
return False
def asDisplay(self):
return self.command
async def delete(self):
try:
await self.session.message.delete()
except Exception:
Logger.error(traceback.format_exc())