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/bot.py

107 lines
3.1 KiB
Python
Raw Normal View History

2022-08-16 18:53:43 +00:00
import importlib
2021-08-19 12:17:48 +00:00
import os
2022-07-29 10:55:20 +00:00
import re
2023-09-01 11:42:33 +00:00
import sys
2022-08-16 18:53:43 +00:00
import traceback
2021-07-21 17:58:33 +00:00
2021-07-26 12:43:51 +00:00
import discord
2023-08-29 18:13:34 +00:00
from bots.discord.client import client
from bots.discord.info import client_name
2022-06-12 07:07:53 +00:00
from bots.discord.message import MessageSession, FetchTarget
2021-08-07 07:56:48 +00:00
from config import Config
2023-02-05 14:33:33 +00:00
from core.builtins import PrivateAssets, Url
2021-07-21 17:58:33 +00:00
from core.logger import Logger
from core.parser.message import parser
2023-02-05 14:33:33 +00:00
from core.types import MsgInfo, Session
2023-03-01 13:41:42 +00:00
from core.utils.bot import init_async, load_prompt
2023-09-01 11:42:33 +00:00
from core.utils.info import Info
2021-08-19 12:17:48 +00:00
PrivateAssets.set(os.path.abspath(os.path.dirname(__file__) + '/assets'))
2022-06-12 07:07:53 +00:00
Url.disable_mm = True
2021-08-03 16:04:59 +00:00
2021-08-23 16:08:21 +00:00
count = 0
2021-08-23 12:44:31 +00:00
2021-07-21 17:58:33 +00:00
dc_token = Config('dc_token')
2023-09-01 11:42:33 +00:00
@client.event
async def on_ready():
Logger.info('Logged on as ' + str(client.user))
global count
if count == 0:
await init_async()
await load_prompt(FetchTarget)
count = 1
2023-09-03 08:50:12 +00:00
2023-09-01 11:42:33 +00:00
slash_load_dir = os.path.abspath(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'slash'))
def load_slashcommands():
fun_file = None
dir_list = os.listdir(slash_load_dir)
for file_name in dir_list:
try:
file_path = os.path.join(slash_load_dir, file_name)
fun_file = None
if os.path.isdir(file_path):
if file_name[0] != '_':
fun_file = file_name
elif os.path.isfile(file_path):
if file_name[0] != '_' and file_name.endswith('.py'):
fun_file = file_name[:-3]
if fun_file is not None:
Logger.info(f'Loading slash.{fun_file}...')
modules = 'bots.discord.slash.' + fun_file
importlib.import_module(modules)
Logger.info(f'Succeeded loaded bots.discord.slash.{fun_file}!')
except BaseException:
tb = traceback.format_exc()
errmsg = f'Failed to load bots.discord.slash.{fun_file}: \n{tb}'
Logger.error(errmsg)
load_slashcommands()
@client.event
async def on_message(message):
# don't respond to ourselves
if message.author == client.user or message.author.bot:
return
target = "Discord|Channel"
if isinstance(message.channel, discord.DMChannel):
target = "Discord|DM|Channel"
2023-09-01 14:38:32 +00:00
target_id = f"{target}|{message.channel.id}"
2023-09-03 11:49:14 +00:00
reply_id = None
2023-09-01 11:42:33 +00:00
if message.reference is not None:
2023-09-03 11:49:14 +00:00
reply_id = message.reference.message_id
2023-09-01 11:42:33 +00:00
prefix = None
if match_at := re.match(r'^<@(.*?)>', message.content):
if match_at.group(1) == str(client.user.id):
prefix = ['']
message.content = re.sub(r'<@(.*?)>', '', message.content)
msg = MessageSession(
target=MsgInfo(
2023-09-01 14:38:32 +00:00
target_id=target_id,
sender_id=f"Discord|Client|{message.author.id}",
sender_name=message.author.name,
target_from=target,
sender_from="Discord|Client",
client_name=client_name,
message_id=message.id,
2023-09-03 11:49:14 +00:00
reply_id=reply_id),
2023-09-01 11:42:33 +00:00
session=Session(
message=message,
target=message.channel,
sender=message.author))
await parser(msg, prefix=prefix)
2023-09-03 08:50:12 +00:00
2023-09-01 11:42:33 +00:00
if 'subprocess' in sys.argv:
Info.subprocess = True
client.run(dc_token)