This commit is contained in:
parent
8dca12f8ec
commit
a6972ddd91
114 changed files with 536 additions and 336 deletions
|
@ -8,9 +8,10 @@ from bots.aiocqhttp.client import bot
|
||||||
from bots.aiocqhttp.message import MessageSession, FetchTarget
|
from bots.aiocqhttp.message import MessageSession, FetchTarget
|
||||||
from bots.aiocqhttp.message_guild import MessageSession as MessageSessionGuild
|
from bots.aiocqhttp.message_guild import MessageSession as MessageSessionGuild
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.elements import MsgInfo, Session, EnableDirtyWordCheck, PrivateAssets, Url
|
from core.builtins import EnableDirtyWordCheck, PrivateAssets, Url
|
||||||
from core.parser.message import parser
|
from core.parser.message import parser
|
||||||
from core.utils import init, load_prompt, init_async
|
from core.types import MsgInfo, Session
|
||||||
|
from core.utils.bot import init, load_prompt, init_async
|
||||||
from database import BotDBUtil
|
from database import BotDBUtil
|
||||||
|
|
||||||
PrivateAssets.set(os.path.abspath(os.path.dirname(__file__) + '/assets'))
|
PrivateAssets.set(os.path.abspath(os.path.dirname(__file__) + '/assets'))
|
||||||
|
|
|
@ -15,11 +15,12 @@ from bots.aiocqhttp.client import bot
|
||||||
from bots.aiocqhttp.message_guild import MessageSession as MessageSessionGuild
|
from bots.aiocqhttp.message_guild import MessageSession as MessageSessionGuild
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.builtins import Bot
|
from core.builtins import Bot
|
||||||
|
from core.builtins import Plain, Image, Voice, Temp
|
||||||
from core.builtins.message import MessageSession as MS
|
from core.builtins.message import MessageSession as MS
|
||||||
from core.elements import Plain, Image, MsgInfo, Session, Voice, FetchTarget as FT, \
|
from core.builtins.message.chain import MessageChain
|
||||||
FetchedSession as FS, FinishedSession as FinS, Temp
|
|
||||||
from core.elements.message.chain import MessageChain
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
|
from core.types import MsgInfo, Session, FetchTarget as FT, \
|
||||||
|
FetchedSession as FS, FinishedSession as FinS
|
||||||
from database import BotDBUtil
|
from database import BotDBUtil
|
||||||
|
|
||||||
enable_analytics = Config('enable_analytics')
|
enable_analytics = Config('enable_analytics')
|
||||||
|
@ -220,7 +221,8 @@ class FetchTarget(FT):
|
||||||
Temp.data['waiting_for_send_group_message'].append({'fetch': fetch_, 'message': message})
|
Temp.data['waiting_for_send_group_message'].append({'fetch': fetch_, 'message': message})
|
||||||
fetch_base_superuser = await FetchTarget.fetch_target(base_superuser)
|
fetch_base_superuser = await FetchTarget.fetch_target(base_superuser)
|
||||||
if fetch_base_superuser:
|
if fetch_base_superuser:
|
||||||
await fetch_base_superuser.sendDirectMessage('群消息发送被服务器拦截,已暂停群消息发送,使用~resume命令恢复推送。')
|
await fetch_base_superuser.sendDirectMessage(
|
||||||
|
'群消息发送被服务器拦截,已暂停群消息发送,使用~resume命令恢复推送。')
|
||||||
except Exception:
|
except Exception:
|
||||||
Logger.error(traceback.format_exc())
|
Logger.error(traceback.format_exc())
|
||||||
|
|
||||||
|
|
|
@ -6,10 +6,10 @@ from pathlib import Path
|
||||||
from aiocqhttp import MessageSegment
|
from aiocqhttp import MessageSegment
|
||||||
|
|
||||||
from bots.aiocqhttp.client import bot
|
from bots.aiocqhttp.client import bot
|
||||||
from core.builtins.message import MessageSession as MS
|
from core.builtins import Plain, Image, ExecutionLockList, MessageSession as MS
|
||||||
from core.elements import Plain, Image, ExecutionLockList, FinishedSession as FinS
|
from core.builtins.message.chain import MessageChain
|
||||||
from core.elements.message.chain import MessageChain
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
|
from core.types import FinishedSession as FinS
|
||||||
|
|
||||||
|
|
||||||
class FinishedSession(FinS):
|
class FinishedSession(FinS):
|
||||||
|
|
|
@ -4,9 +4,10 @@ from aiogram import types, executor
|
||||||
|
|
||||||
from bots.aiogram.client import dp
|
from bots.aiogram.client import dp
|
||||||
from bots.aiogram.message import MessageSession, FetchTarget
|
from bots.aiogram.message import MessageSession, FetchTarget
|
||||||
from core.elements import MsgInfo, Session, PrivateAssets, Url
|
from core.builtins import PrivateAssets, Url
|
||||||
from core.parser.message import parser
|
from core.parser.message import parser
|
||||||
from core.utils import init, load_prompt, init_async
|
from core.types import MsgInfo, Session
|
||||||
|
from core.utils.bot import init, load_prompt, init_async
|
||||||
|
|
||||||
PrivateAssets.set(os.path.abspath(os.path.dirname(__file__) + '/assets'))
|
PrivateAssets.set(os.path.abspath(os.path.dirname(__file__) + '/assets'))
|
||||||
init()
|
init()
|
||||||
|
|
|
@ -4,13 +4,12 @@ from typing import List, Union
|
||||||
|
|
||||||
from bots.aiogram.client import dp, bot
|
from bots.aiogram.client import dp, bot
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.builtins import Bot
|
from core.builtins import Bot, Plain, Image, Voice, MessageSession as MS
|
||||||
from core.builtins.message import MessageSession as MS
|
from core.builtins.message.chain import MessageChain
|
||||||
from core.elements import Plain, Image, MsgInfo, Session, Voice, FetchTarget as FT, FetchedSession as FS, \
|
|
||||||
FinishedSession as FinS
|
|
||||||
from core.elements.message.chain import MessageChain
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import image_split
|
from core.types import MsgInfo, Session, FetchTarget as FT, FetchedSession as FS, \
|
||||||
|
FinishedSession as FinS
|
||||||
|
from core.utils.image import image_split
|
||||||
from database import BotDBUtil
|
from database import BotDBUtil
|
||||||
|
|
||||||
enable_analytics = Config('enable_analytics')
|
enable_analytics = Config('enable_analytics')
|
||||||
|
|
|
@ -8,10 +8,11 @@ import discord
|
||||||
from bots.discord.client import client
|
from bots.discord.client import client
|
||||||
from bots.discord.message import MessageSession, FetchTarget
|
from bots.discord.message import MessageSession, FetchTarget
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.elements import MsgInfo, Session, PrivateAssets, Url
|
from core.builtins import PrivateAssets, Url
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.parser.message import parser
|
from core.parser.message import parser
|
||||||
from core.utils import init, init_async, load_prompt
|
from core.types import MsgInfo, Session
|
||||||
|
from core.utils.bot import init, init_async, load_prompt
|
||||||
|
|
||||||
PrivateAssets.set(os.path.abspath(os.path.dirname(__file__) + '/assets'))
|
PrivateAssets.set(os.path.abspath(os.path.dirname(__file__) + '/assets'))
|
||||||
init()
|
init()
|
||||||
|
|
|
@ -7,13 +7,12 @@ import discord
|
||||||
|
|
||||||
from bots.discord.client import client
|
from bots.discord.client import client
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.builtins import Bot
|
from core.builtins import Bot, Plain, Image, MessageSession as MS
|
||||||
from core.builtins.message import MessageSession as MS
|
from core.builtins.message.chain import MessageChain
|
||||||
from core.elements import Plain, Image, MsgInfo, Session, FetchTarget as FT, \
|
from core.builtins.message.internal import Embed
|
||||||
FetchedSession as FS, FinishedSession as FinS
|
|
||||||
from core.elements.message.chain import MessageChain
|
|
||||||
from core.elements.message.internal import Embed
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
|
from core.types import MsgInfo, Session, FetchTarget as FT, \
|
||||||
|
FetchedSession as FS, FinishedSession as FinS
|
||||||
from database import BotDBUtil
|
from database import BotDBUtil
|
||||||
|
|
||||||
enable_analytics = Config('enable_analytics')
|
enable_analytics = Config('enable_analytics')
|
||||||
|
|
|
@ -4,7 +4,7 @@ import discord
|
||||||
|
|
||||||
from bots.discord.client import client
|
from bots.discord.client import client
|
||||||
from bots.discord.slash_parser import slash_parser
|
from bots.discord.slash_parser import slash_parser
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
|
|
||||||
api = 'https://ca.projectxero.top/idlist/search'
|
api = 'https://ca.projectxero.top/idlist/search'
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,11 @@ import discord
|
||||||
|
|
||||||
from bots.discord.message import convert_embed
|
from bots.discord.message import convert_embed
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.builtins.message import MessageSession as MS
|
from core.builtins import Plain, Image, MessageSession as MS
|
||||||
from core.elements import Plain, Image, FinishedSession as FinS
|
from core.builtins.message.chain import MessageChain
|
||||||
from core.elements.message.chain import MessageChain
|
from core.builtins.message.internal import Embed
|
||||||
from core.elements.message.internal import Embed
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
|
from core.types import FinishedSession as FinS
|
||||||
|
|
||||||
enable_analytics = Config('enable_analytics')
|
enable_analytics = Config('enable_analytics')
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@ from typing import Union
|
||||||
import discord
|
import discord
|
||||||
|
|
||||||
from bots.discord.slash_message import MessageSession
|
from bots.discord.slash_message import MessageSession
|
||||||
from core.elements import MsgInfo, Session
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.parser.message import parser
|
from core.parser.message import parser
|
||||||
|
from core.types import MsgInfo, Session
|
||||||
|
|
||||||
|
|
||||||
def ctx_to_session(ctx: Union[discord.ApplicationContext, discord.AutocompleteContext]):
|
def ctx_to_session(ctx: Union[discord.ApplicationContext, discord.AutocompleteContext]):
|
||||||
|
|
|
@ -18,10 +18,11 @@ import traceback
|
||||||
import aioconsole
|
import aioconsole
|
||||||
|
|
||||||
from bot import init_bot
|
from bot import init_bot
|
||||||
from core.elements import MsgInfo, AutoSession, PrivateAssets, EnableDirtyWordCheck, Plain
|
from core.builtins import PrivateAssets, EnableDirtyWordCheck, Plain
|
||||||
|
from core.types import MsgInfo, AutoSession
|
||||||
from core.console.template import Template as MessageSession, FetchTarget
|
from core.console.template import Template as MessageSession, FetchTarget
|
||||||
from core.parser.message import parser
|
from core.parser.message import parser
|
||||||
from core.utils import init, init_async
|
from core.utils.bot import init, init_async
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
|
|
||||||
query_dbver = session.query(DBVersion).first()
|
query_dbver = session.query(DBVersion).first()
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
|
from core.types.message import FetchTarget
|
||||||
from .message import *
|
from .message import *
|
||||||
from core.elements.message import FetchTarget
|
from .message.chain import *
|
||||||
|
from .message.internal import *
|
||||||
|
from .tasks import *
|
||||||
|
from .temp import *
|
||||||
|
from .utils import *
|
||||||
|
|
||||||
|
|
||||||
class Bot:
|
class Bot:
|
||||||
MessageSession = MessageSession
|
MessageSession = MessageSession
|
||||||
FetchTarget = FetchTarget
|
FetchTarget = FetchTarget
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['Bot']
|
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from core.elements import ExecutionLockList, Plain, confirm_command
|
from core.builtins.message.chain import *
|
||||||
from core.elements.message import *
|
from core.builtins.message.internal import *
|
||||||
from core.elements.message.chain import MessageChain
|
from core.builtins.tasks import MessageTaskManager
|
||||||
|
from core.builtins.temp import ExecutionLockList
|
||||||
|
from core.builtins.utils import confirm_command
|
||||||
from core.exceptions import WaitCancelException
|
from core.exceptions import WaitCancelException
|
||||||
from core.utils import MessageTaskManager
|
from core.types.message import *
|
||||||
from core.utils.i18n import get_target_locale
|
from core.utils.i18n import get_target_locale
|
||||||
from database import BotDBUtil
|
from database import BotDBUtil
|
||||||
|
|
||||||
|
@ -106,4 +108,3 @@ class MessageSession(MessageSession):
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["MessageSession"]
|
__all__ = ["MessageSession"]
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,13 @@ from urllib.parse import urlparse
|
||||||
|
|
||||||
import ujson as json
|
import ujson as json
|
||||||
|
|
||||||
from core.elements.others import Secret
|
from core.builtins.message.internal import Plain, Image, Voice, Embed, Url, ErrorMessage
|
||||||
|
from core.builtins.utils import Secret
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from .internal import Plain, Image, Voice, Embed, Url, ErrorMessage
|
from core.types.message import MessageChain as MC
|
||||||
|
|
||||||
|
|
||||||
class MessageChain:
|
class MessageChain(MC):
|
||||||
def __init__(self, elements: Union[str, List[Union[Plain, Image, Voice, Embed, Url]],
|
def __init__(self, elements: Union[str, List[Union[Plain, Image, Voice, Embed, Url]],
|
||||||
Tuple[Union[Plain, Image, Voice, Embed, Url]],
|
Tuple[Union[Plain, Image, Voice, Embed, Url]],
|
||||||
Plain, Image, Voice, Embed, Url]):
|
Plain, Image, Voice, Embed, Url]):
|
|
@ -10,9 +10,11 @@ from PIL import Image as PImage
|
||||||
from tenacity import retry, stop_after_attempt
|
from tenacity import retry, stop_after_attempt
|
||||||
|
|
||||||
from config import CachePath
|
from config import CachePath
|
||||||
|
from core.types.message.internal import Plain as P, Image as I, Voice as V, Embed as E, EmbedField as EF, \
|
||||||
|
Url as U, ErrorMessage as EMsg
|
||||||
|
|
||||||
|
|
||||||
class Plain:
|
class Plain(P):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
text, *texts):
|
text, *texts):
|
||||||
self.text = str(text)
|
self.text = str(text)
|
||||||
|
@ -26,7 +28,7 @@ class Plain:
|
||||||
return f'Plain(text="{self.text}")'
|
return f'Plain(text="{self.text}")'
|
||||||
|
|
||||||
|
|
||||||
class Url:
|
class Url(U):
|
||||||
mm = False
|
mm = False
|
||||||
disable_mm = False
|
disable_mm = False
|
||||||
|
|
||||||
|
@ -46,7 +48,7 @@ class Url:
|
||||||
return f'Url(url="{self.url}")'
|
return f'Url(url="{self.url}")'
|
||||||
|
|
||||||
|
|
||||||
class ErrorMessage:
|
class ErrorMessage(EMsg):
|
||||||
def __init__(self, error_message):
|
def __init__(self, error_message):
|
||||||
self.error_message = '发生错误:' + error_message + '\n错误汇报地址: ' + \
|
self.error_message = '发生错误:' + error_message + '\n错误汇报地址: ' + \
|
||||||
str(Url(
|
str(Url(
|
||||||
|
@ -59,7 +61,7 @@ class ErrorMessage:
|
||||||
return self.error_message
|
return self.error_message
|
||||||
|
|
||||||
|
|
||||||
class Image:
|
class Image(I):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
path, headers=None):
|
path, headers=None):
|
||||||
self.need_get = False
|
self.need_get = False
|
||||||
|
@ -96,7 +98,7 @@ class Image:
|
||||||
return f'Image(path="{self.path}", headers={self.headers})'
|
return f'Image(path="{self.path}", headers={self.headers})'
|
||||||
|
|
||||||
|
|
||||||
class Voice:
|
class Voice(V):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
path=None):
|
path=None):
|
||||||
self.path = path
|
self.path = path
|
||||||
|
@ -108,7 +110,7 @@ class Voice:
|
||||||
return f'Voice(path={self.path})'
|
return f'Voice(path={self.path})'
|
||||||
|
|
||||||
|
|
||||||
class EmbedField:
|
class EmbedField(EF):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
name: str = None,
|
name: str = None,
|
||||||
value: str = None,
|
value: str = None,
|
||||||
|
@ -124,7 +126,7 @@ class EmbedField:
|
||||||
return f'EmbedField(name="{self.name}", value="{self.value}", inline={self.inline})'
|
return f'EmbedField(name="{self.name}", value="{self.value}", inline={self.inline})'
|
||||||
|
|
||||||
|
|
||||||
class Embed:
|
class Embed(E):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
title: str = None,
|
title: str = None,
|
||||||
description: str = None,
|
description: str = None,
|
|
@ -1,6 +1,6 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from core.elements import MessageSession
|
from core.types import MessageSession
|
||||||
|
|
||||||
|
|
||||||
class MessageTaskManager:
|
class MessageTaskManager:
|
|
@ -1,4 +1,4 @@
|
||||||
from core.elements import MessageSession
|
from core.types import MessageSession
|
||||||
|
|
||||||
|
|
||||||
class Temp:
|
class Temp:
|
|
@ -7,10 +7,10 @@ from apscheduler.triggers.cron import CronTrigger
|
||||||
from apscheduler.triggers.date import DateTrigger
|
from apscheduler.triggers.date import DateTrigger
|
||||||
from apscheduler.triggers.interval import IntervalTrigger
|
from apscheduler.triggers.interval import IntervalTrigger
|
||||||
|
|
||||||
from core.elements import Command, RegexCommand, Schedule, StartUp
|
|
||||||
from core.elements.module.component_meta import *
|
|
||||||
from core.loader import ModulesManager
|
from core.loader import ModulesManager
|
||||||
from core.parser.args import parse_template
|
from core.parser.args import parse_template
|
||||||
|
from core.types import Command, RegexCommand, Schedule, StartUp
|
||||||
|
from core.types.module.component_meta import *
|
||||||
|
|
||||||
|
|
||||||
class Bind:
|
class Bind:
|
||||||
|
|
|
@ -2,12 +2,12 @@ from typing import List, Union
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
|
from core.builtins import Plain, Image as BImage, confirm_command
|
||||||
from core.builtins.message import MessageSession as MS
|
from core.builtins.message import MessageSession as MS
|
||||||
from core.elements import Plain, Image as BImage, Session, MsgInfo, FetchTarget as FT, \
|
from core.builtins.message.chain import MessageChain
|
||||||
FetchedSession as FS, FinishedSession as FinS, AutoSession as AS
|
|
||||||
from core.elements.message.chain import MessageChain
|
|
||||||
from core.elements.others import confirm_command
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
|
from core.types import Session, MsgInfo, FetchTarget as FT, \
|
||||||
|
FetchedSession as FS, FinishedSession as FinS, AutoSession as AS
|
||||||
|
|
||||||
|
|
||||||
class FinishedSession(FinS):
|
class FinishedSession(FinS):
|
||||||
|
|
|
@ -13,7 +13,7 @@ import aiohttp
|
||||||
from tenacity import retry, wait_fixed, stop_after_attempt
|
from tenacity import retry, wait_fixed, stop_after_attempt
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.elements import EnableDirtyWordCheck
|
from core.builtins import EnableDirtyWordCheck
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from database.local import DirtyWordCache
|
from database.local import DirtyWordCache
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
from .message import *
|
|
||||||
from .message.internal import *
|
|
||||||
from .module import *
|
|
||||||
from .others import *
|
|
||||||
from .temp import *
|
|
|
@ -5,8 +5,9 @@ import sys
|
||||||
import traceback
|
import traceback
|
||||||
from typing import Dict, Union
|
from typing import Dict, Union
|
||||||
|
|
||||||
from core.elements import Command, Schedule, RegexCommand, StartUp, PrivateAssets
|
from core.builtins import PrivateAssets
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
|
from core.types import Command, Schedule, RegexCommand, StartUp
|
||||||
|
|
||||||
load_dir_path = os.path.abspath('./modules/')
|
load_dir_path = os.path.abspath('./modules/')
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,8 @@ import shlex
|
||||||
import traceback
|
import traceback
|
||||||
from typing import Union, Dict
|
from typing import Union, Dict
|
||||||
|
|
||||||
from core.elements import Command, MessageSession
|
|
||||||
from core.exceptions import InvalidCommandFormatError
|
from core.exceptions import InvalidCommandFormatError
|
||||||
|
from core.types import Command, MessageSession
|
||||||
from .args import parse_argv, Template, templates_to_str, DescPattern
|
from .args import parse_argv, Template, templates_to_str, DescPattern
|
||||||
from ..logger import Logger
|
from ..logger import Logger
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,7 @@ from typing import List, Dict
|
||||||
from aiocqhttp.exceptions import ActionFailed
|
from aiocqhttp.exceptions import ActionFailed
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import command_prefix, ExecutionLockList, ErrorMessage, MessageSession, MessageTaskManager
|
||||||
from core.elements import Command, command_prefix, ExecutionLockList, RegexCommand, ErrorMessage
|
|
||||||
from core.elements.module.component_meta import CommandMeta
|
|
||||||
from core.exceptions import AbuseWarning, FinishedException, InvalidCommandFormatError, InvalidHelpDocTypeError, \
|
from core.exceptions import AbuseWarning, FinishedException, InvalidCommandFormatError, InvalidHelpDocTypeError, \
|
||||||
WaitCancelException, NoReportException
|
WaitCancelException, NoReportException
|
||||||
from core.loader import ModulesManager
|
from core.loader import ModulesManager
|
||||||
|
@ -18,7 +16,9 @@ from core.logger import Logger
|
||||||
from core.parser.args import Template, ArgumentPattern, templates_to_str
|
from core.parser.args import Template, ArgumentPattern, templates_to_str
|
||||||
from core.parser.command import CommandParser
|
from core.parser.command import CommandParser
|
||||||
from core.tos import warn_target
|
from core.tos import warn_target
|
||||||
from core.utils import removeIneffectiveText, removeDuplicateSpace, MessageTaskManager
|
from core.types import Command, RegexCommand
|
||||||
|
from core.types.module.component_meta import CommandMeta
|
||||||
|
from core.utils.message import removeIneffectiveText, removeDuplicateSpace
|
||||||
from database import BotDBUtil
|
from database import BotDBUtil
|
||||||
|
|
||||||
enable_tos = Config('enable_tos')
|
enable_tos = Config('enable_tos')
|
||||||
|
|
|
@ -1,4 +1,10 @@
|
||||||
'''基于apscheduler的计划任务。'''
|
'''基于apscheduler的计划任务。'''
|
||||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||||
|
from apscheduler.triggers.combining import AndTrigger, OrTrigger
|
||||||
|
from apscheduler.triggers.cron import CronTrigger
|
||||||
|
from apscheduler.triggers.date import DateTrigger
|
||||||
|
from apscheduler.triggers.interval import IntervalTrigger
|
||||||
|
|
||||||
Scheduler = AsyncIOScheduler()
|
Scheduler = AsyncIOScheduler()
|
||||||
|
|
||||||
|
__all__ = ["Scheduler", "AndTrigger", "OrTrigger", "CronTrigger", "DateTrigger", "IntervalTrigger"]
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from core.elements import MessageSession
|
from core.builtins import MessageSession
|
||||||
from database import BotDBUtil
|
from database import BotDBUtil
|
||||||
|
|
||||||
|
|
||||||
|
|
2
core/types/__init__.py
Normal file
2
core/types/__init__.py
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
from .message import *
|
||||||
|
from .module import *
|
|
@ -1,8 +1,8 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
from typing import List, Union
|
from typing import List, Union
|
||||||
|
|
||||||
from core.elements.message.chain import MessageChain
|
|
||||||
from core.exceptions import FinishedException
|
from core.exceptions import FinishedException
|
||||||
|
from .chain import MessageChain
|
||||||
|
|
||||||
|
|
||||||
class MsgInfo:
|
class MsgInfo:
|
42
core/types/message/chain.py
Normal file
42
core/types/message/chain.py
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
from typing import Union, List, Tuple
|
||||||
|
|
||||||
|
from .internal import Plain, Image, Voice, Embed, Url
|
||||||
|
|
||||||
|
|
||||||
|
class MessageChain:
|
||||||
|
"""
|
||||||
|
消息链。
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, elements: Union[str, List[Union[Plain, Image, Voice, Embed, Url]],
|
||||||
|
Tuple[Union[Plain, Image, Voice, Embed, Url]],
|
||||||
|
Plain, Image, Voice, Embed, Url]):
|
||||||
|
"""
|
||||||
|
:param elements: 消息链元素
|
||||||
|
"""
|
||||||
|
self.elements = elements
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_safe(self) -> bool:
|
||||||
|
"""
|
||||||
|
检查消息链是否安全。
|
||||||
|
"""
|
||||||
|
return True
|
||||||
|
|
||||||
|
def asSendable(self, embed=True) -> list:
|
||||||
|
"""
|
||||||
|
将消息链转换为可发送的格式。
|
||||||
|
"""
|
||||||
|
|
||||||
|
def append(self, element):
|
||||||
|
"""
|
||||||
|
添加一个消息链元素到末尾。
|
||||||
|
"""
|
||||||
|
|
||||||
|
def remove(self, element):
|
||||||
|
"""
|
||||||
|
删除一个消息链元素。
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ["MessageChain"]
|
154
core/types/message/internal.py
Normal file
154
core/types/message/internal.py
Normal file
|
@ -0,0 +1,154 @@
|
||||||
|
from typing import Union, List
|
||||||
|
|
||||||
|
from PIL import Image as PImage
|
||||||
|
|
||||||
|
|
||||||
|
class Plain:
|
||||||
|
"""
|
||||||
|
文本消息。
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, text, *texts):
|
||||||
|
"""
|
||||||
|
:param text: 文本内容
|
||||||
|
"""
|
||||||
|
self.text = str(text)
|
||||||
|
for t in texts:
|
||||||
|
self.text += str(t)
|
||||||
|
|
||||||
|
|
||||||
|
class Url:
|
||||||
|
"""
|
||||||
|
URL消息。
|
||||||
|
"""
|
||||||
|
|
||||||
|
mm = False
|
||||||
|
disable_mm = False
|
||||||
|
|
||||||
|
def __init__(self, url: str, use_mm: bool = False, disable_mm: bool = False):
|
||||||
|
"""
|
||||||
|
:param url: URL
|
||||||
|
:param use_mm: 是否使用跳转链接,覆盖全局设置
|
||||||
|
:param disable_mm: 是否禁用跳转链接,覆盖全局设置
|
||||||
|
"""
|
||||||
|
self.url = url
|
||||||
|
self.mm = use_mm
|
||||||
|
self.disable_mm = disable_mm
|
||||||
|
|
||||||
|
|
||||||
|
class ErrorMessage:
|
||||||
|
"""
|
||||||
|
错误消息。
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, error_message):
|
||||||
|
"""
|
||||||
|
:param error_message: 错误信息文本
|
||||||
|
"""
|
||||||
|
self.error_message = error_message
|
||||||
|
|
||||||
|
|
||||||
|
class Image:
|
||||||
|
"""
|
||||||
|
图片消息。
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self,
|
||||||
|
path: Union[str, PImage.Image], headers=None):
|
||||||
|
"""
|
||||||
|
:param path: 图片路径或PIL.Image对象
|
||||||
|
:param headers: 获取图片时的请求头
|
||||||
|
"""
|
||||||
|
self.need_get = False
|
||||||
|
self.path = path
|
||||||
|
self.headers = headers
|
||||||
|
|
||||||
|
async def get(self):
|
||||||
|
"""
|
||||||
|
获取图片。
|
||||||
|
"""
|
||||||
|
|
||||||
|
async def get_image(self):
|
||||||
|
"""
|
||||||
|
从网络下载图片。
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Voice:
|
||||||
|
"""
|
||||||
|
语音消息。
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self,
|
||||||
|
path=None):
|
||||||
|
"""
|
||||||
|
:param path: 语音文件路径。
|
||||||
|
"""
|
||||||
|
self.path = path
|
||||||
|
|
||||||
|
|
||||||
|
class EmbedField:
|
||||||
|
"""
|
||||||
|
Embed消息的字段。
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self,
|
||||||
|
name: str = None,
|
||||||
|
value: str = None,
|
||||||
|
inline: bool = False):
|
||||||
|
"""
|
||||||
|
:param name: 字段名
|
||||||
|
:param value: 字段值
|
||||||
|
:param inline: 是否为行内字段
|
||||||
|
"""
|
||||||
|
self.name = name
|
||||||
|
self.value = value
|
||||||
|
self.inline = inline
|
||||||
|
|
||||||
|
|
||||||
|
class Embed:
|
||||||
|
"""
|
||||||
|
Embed消息。
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self,
|
||||||
|
title: str = None,
|
||||||
|
description: str = None,
|
||||||
|
url: str = None,
|
||||||
|
timestamp: float = None,
|
||||||
|
color: int = None,
|
||||||
|
image: Image = None,
|
||||||
|
thumbnail: Image = None,
|
||||||
|
author: str = None,
|
||||||
|
footer: str = None,
|
||||||
|
fields: List[EmbedField] = None):
|
||||||
|
"""
|
||||||
|
:param title: 标题
|
||||||
|
:param description: 描述
|
||||||
|
:param url: 跳转链接
|
||||||
|
:param timestamp: 时间戳
|
||||||
|
:param color: 颜色
|
||||||
|
:param image: 图片
|
||||||
|
:param thumbnail: 缩略图
|
||||||
|
:param author: 作者
|
||||||
|
:param footer: 页脚
|
||||||
|
:param fields: 字段
|
||||||
|
"""
|
||||||
|
self.title = title
|
||||||
|
self.description = description
|
||||||
|
self.url = url
|
||||||
|
self.timestamp = timestamp
|
||||||
|
self.color = color
|
||||||
|
self.image = image
|
||||||
|
self.thumbnail = thumbnail
|
||||||
|
self.author = author
|
||||||
|
self.footer = footer
|
||||||
|
self.fields = fields
|
||||||
|
|
||||||
|
def to_msgchain(self):
|
||||||
|
"""
|
||||||
|
将Embed转换为消息链。
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ["Plain", "Image", "Voice", "Embed", "EmbedField", "Url", "ErrorMessage"]
|
|
@ -1,11 +0,0 @@
|
||||||
from .bot import *
|
|
||||||
from .cache import *
|
|
||||||
from .http import *
|
|
||||||
from .ip import *
|
|
||||||
from .i18n import *
|
|
||||||
from .image import *
|
|
||||||
from .image_table import *
|
|
||||||
from .message import *
|
|
||||||
from .message import *
|
|
||||||
from .storedata import *
|
|
||||||
from .tasks import *
|
|
|
@ -7,11 +7,12 @@ from os.path import abspath
|
||||||
|
|
||||||
import ujson as json
|
import ujson as json
|
||||||
|
|
||||||
from core.elements import PrivateAssets, StartUp, Schedule, Secret
|
from core.builtins import PrivateAssets, Secret
|
||||||
from core.exceptions import ConfigFileNotFound
|
from core.exceptions import ConfigFileNotFound
|
||||||
from core.loader import load_modules, ModulesManager
|
from core.loader import load_modules, ModulesManager
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.scheduler import Scheduler
|
from core.scheduler import Scheduler
|
||||||
|
from core.types import StartUp, Schedule
|
||||||
from core.utils.http import get_url
|
from core.utils.http import get_url
|
||||||
from core.utils.ip import IP
|
from core.utils.ip import IP
|
||||||
|
|
||||||
|
@ -73,6 +74,7 @@ async def load_secret():
|
||||||
Secret.add(ip['ip'])
|
Secret.add(ip['ip'])
|
||||||
IP.country = ip['country']
|
IP.country = ip['country']
|
||||||
IP.address = ip['ip']
|
IP.address = ip['ip']
|
||||||
|
|
||||||
Logger.info('Fetching IP information...')
|
Logger.info('Fetching IP information...')
|
||||||
await asyncio.create_task(append_ip())
|
await asyncio.create_task(append_ip())
|
||||||
Logger.info('Successfully fetched IP information.')
|
Logger.info('Successfully fetched IP information.')
|
||||||
|
|
|
@ -7,7 +7,7 @@ import urllib.parse as urlparse
|
||||||
from textwrap import wrap
|
from textwrap import wrap
|
||||||
from typing import Dict, List, Optional, Tuple, Union
|
from typing import Dict, List, Optional, Tuple, Union
|
||||||
|
|
||||||
from core.elements import Url
|
from core.builtins import Url
|
||||||
from . import config
|
from . import config
|
||||||
from .elements import AnchorElement, ListElement
|
from .elements import AnchorElement, ListElement
|
||||||
from .typing import OutCallback
|
from .typing import OutCallback
|
||||||
|
|
|
@ -5,7 +5,7 @@ from typing import TypedDict
|
||||||
|
|
||||||
import ujson as json
|
import ujson as json
|
||||||
|
|
||||||
from core.elements.message import MessageSession
|
from core.builtins.message import MessageSession
|
||||||
|
|
||||||
# Load all locale files into memory
|
# Load all locale files into memory
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ from typing import List
|
||||||
|
|
||||||
from PIL import Image as PImage
|
from PIL import Image as PImage
|
||||||
|
|
||||||
from core.elements import Image
|
from core.builtins import Image
|
||||||
|
|
||||||
|
|
||||||
async def image_split(i: Image) -> List[Image]:
|
async def image_split(i: Image) -> List[Image]:
|
||||||
|
|
|
@ -3,7 +3,7 @@ from typing import Union
|
||||||
|
|
||||||
from discord import Embed as DiscordEmbed
|
from discord import Embed as DiscordEmbed
|
||||||
|
|
||||||
from core.elements.message.internal import Embed, EmbedField
|
from core.builtins.message.internal import Embed, EmbedField
|
||||||
|
|
||||||
|
|
||||||
def removeIneffectiveText(prefix: str, lst: list) -> list:
|
def removeIneffectiveText(prefix: str, lst: list) -> list:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import ujson as json
|
import ujson as json
|
||||||
|
|
||||||
from core.elements import FetchTarget
|
from core.types import FetchTarget
|
||||||
from database import BotDBUtil
|
from database import BotDBUtil
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ from typing import Union, List
|
||||||
import ujson as json
|
import ujson as json
|
||||||
from tenacity import retry, stop_after_attempt
|
from tenacity import retry, stop_after_attempt
|
||||||
|
|
||||||
from core.elements.message import MessageSession, FetchTarget, FetchedSession
|
from core.types.message import MessageSession, FetchTarget, FetchedSession
|
||||||
from database.orm import Session
|
from database.orm import Session
|
||||||
from database.tables import *
|
from database.tables import *
|
||||||
from database.tables import TargetInfo
|
from database.tables import TargetInfo
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from core.elements.others import command_prefix
|
from core.builtins import command_prefix
|
||||||
from core.parser.command import CommandParser
|
from core.parser.command import CommandParser
|
||||||
|
|
||||||
c = CommandParser(('~wiki <PageName> {搜索一个Wiki页面}',
|
c = CommandParser(('~wiki <PageName> {搜索一个Wiki页面}',
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
from core.builtins import Plain, Image
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins.message import MessageSession
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import Plain, Image
|
|
||||||
|
|
||||||
test = on_command('test')
|
test = on_command('test')
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
|
from core.builtins import Bot, Image
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import MessageSession, Image
|
|
||||||
from .daily_trials import fetch_daily_trials, json_render
|
from .daily_trials import fetch_daily_trials, json_render
|
||||||
|
|
||||||
dun = on_command('dungeons_trials', alias=['dungeons', 'dungeon', 'dungeonstrials', 'dungeontrials', 'dungeon_trials'],
|
dun = on_command('dungeons_trials', alias=['dungeons', 'dungeon', 'dungeonstrials', 'dungeontrials', 'dungeon_trials'],
|
||||||
|
@ -12,7 +12,7 @@ records = {'ts': 0}
|
||||||
|
|
||||||
|
|
||||||
@dun.handle()
|
@dun.handle()
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
await msg.sendMessage('请稍等...')
|
await msg.sendMessage('请稍等...')
|
||||||
if datetime.now().timestamp() - records['ts'] > 43200:
|
if datetime.now().timestamp() - records['ts'] > 43200:
|
||||||
records['data'] = await fetch_daily_trials(Config('xbox_gametag'), Config('xbox_token'))
|
records['data'] = await fetch_daily_trials(Config('xbox_gametag'), Config('xbox_token'))
|
||||||
|
@ -30,7 +30,7 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@dun.handle('reset {强制重置缓存。}')
|
@dun.handle('reset {强制重置缓存。}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
records['ts'] = 0
|
records['ts'] = 0
|
||||||
await msg.sendMessage('重置成功。')
|
await msg.sendMessage('重置成功。')
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,10 @@ import os
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
|
from core.builtins import Plain, Image
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import Plain, Image
|
from core.utils.http import get_url
|
||||||
from core.utils import get_url
|
|
||||||
from .dbutils import ArcBindInfoManager
|
from .dbutils import ArcBindInfoManager
|
||||||
from .getb30 import getb30
|
from .getb30 import getb30
|
||||||
from .getb30_official import getb30_official
|
from .getb30_official import getb30_official
|
||||||
|
@ -24,7 +24,7 @@ assets_path = os.path.abspath('./assets/arcaea')
|
||||||
@arc.handle('b30 [<friendcode>] {查询一个Arcaea用户的b30列表(自动选择使用API)}',
|
@arc.handle('b30 [<friendcode>] {查询一个Arcaea用户的b30列表(自动选择使用API)}',
|
||||||
'b30 official [<friendcode>] {使用官方API}',
|
'b30 official [<friendcode>] {使用官方API}',
|
||||||
'b30 unofficial [<friendcode>] {使用非官方API}')
|
'b30 unofficial [<friendcode>] {使用非官方API}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
if not os.path.exists(assets_path):
|
if not os.path.exists(assets_path):
|
||||||
await msg.finish(
|
await msg.finish(
|
||||||
'未找到资源文件!请放置一枚arcaea的apk到机器人的assets目录并重命名为arc.apk后,使用~arcaea initialize初始化资源。')
|
'未找到资源文件!请放置一枚arcaea的apk到机器人的assets目录并重命名为arc.apk后,使用~arcaea initialize初始化资源。')
|
||||||
|
@ -82,7 +82,7 @@ async def _(msg: MessageSession):
|
||||||
@arc.handle('info [<friendcode>] {查询一个Arcaea用户的最近游玩记录}',
|
@arc.handle('info [<friendcode>] {查询一个Arcaea用户的最近游玩记录}',
|
||||||
'info official [<friendcode>] {使用官方API}',
|
'info official [<friendcode>] {使用官方API}',
|
||||||
'info unofficial [<friendcode>] {使用非官方API}', )
|
'info unofficial [<friendcode>] {使用非官方API}', )
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
if not os.path.exists(assets_path):
|
if not os.path.exists(assets_path):
|
||||||
await msg.sendMessage(
|
await msg.sendMessage(
|
||||||
'未找到资源文件!请放置一枚arcaea的apk到机器人的assets目录并重命名为arc.apk后,使用~arcaea initialize初始化资源。')
|
'未找到资源文件!请放置一枚arcaea的apk到机器人的assets目录并重命名为arc.apk后,使用~arcaea initialize初始化资源。')
|
||||||
|
@ -136,7 +136,7 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@arc.handle('song <songname+prs/pst/byd> {查询一首Arcaea谱面的信息}')
|
@arc.handle('song <songname+prs/pst/byd> {查询一首Arcaea谱面的信息}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
songname_ = msg.parsed_msg.get('<songname+prs/pst/byd>', False)
|
songname_ = msg.parsed_msg.get('<songname+prs/pst/byd>', False)
|
||||||
songname_split = songname_.split(' ')
|
songname_split = songname_.split(' ')
|
||||||
diff = -1
|
diff = -1
|
||||||
|
@ -164,7 +164,7 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@arc.handle('bind <friendcode/username> {绑定一个Arcaea用户}')
|
@arc.handle('bind <friendcode/username> {绑定一个Arcaea用户}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
code: str = msg.parsed_msg['<friendcode/username>']
|
code: str = msg.parsed_msg['<friendcode/username>']
|
||||||
getcode = await get_userinfo(code)
|
getcode = await get_userinfo(code)
|
||||||
if getcode:
|
if getcode:
|
||||||
|
@ -181,14 +181,14 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@arc.handle('unbind {取消绑定用户}')
|
@arc.handle('unbind {取消绑定用户}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
unbind = ArcBindInfoManager(msg).remove_bind_info()
|
unbind = ArcBindInfoManager(msg).remove_bind_info()
|
||||||
if unbind:
|
if unbind:
|
||||||
await msg.finish('取消绑定成功。')
|
await msg.finish('取消绑定成功。')
|
||||||
|
|
||||||
|
|
||||||
@arc.handle('initialize', required_superuser=True)
|
@arc.handle('initialize', required_superuser=True)
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
assets_apk = os.path.abspath('./assets/arc.apk')
|
assets_apk = os.path.abspath('./assets/arc.apk')
|
||||||
if not os.path.exists(assets_apk):
|
if not os.path.exists(assets_apk):
|
||||||
await msg.finish('未找到arc.apk!')
|
await msg.finish('未找到arc.apk!')
|
||||||
|
@ -199,7 +199,7 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@arc.handle('download {获取最新版本的游戏apk}')
|
@arc.handle('download {获取最新版本的游戏apk}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
if not webrender:
|
if not webrender:
|
||||||
await msg.finish(['未配置webrender,无法使用此命令。'])
|
await msg.finish(['未配置webrender,无法使用此命令。'])
|
||||||
resp = await get_url(webrender + 'source?url=https://webapi.lowiro.com/webapi/serve/static/bin/arcaea/apk/', 200,
|
resp = await get_url(webrender + 'source?url=https://webapi.lowiro.com/webapi/serve/static/bin/arcaea/apk/', 200,
|
||||||
|
@ -209,7 +209,7 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@arc.handle('random {随机一首曲子}')
|
@arc.handle('random {随机一首曲子}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
if not webrender:
|
if not webrender:
|
||||||
await msg.finish(['未配置webrender,无法使用此命令。'])
|
await msg.finish(['未配置webrender,无法使用此命令。'])
|
||||||
resp = await get_url(webrender + 'source?url=https://webapi.lowiro.com/webapi/song/showcase/', 200, fmt='json')
|
resp = await get_url(webrender + 'source?url=https://webapi.lowiro.com/webapi/song/showcase/', 200, fmt='json')
|
||||||
|
@ -223,7 +223,7 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@arc.handle('rank free {查看当前免费包游玩排行}', 'rank paid {查看当前付费包游玩排行}')
|
@arc.handle('rank free {查看当前免费包游玩排行}', 'rank paid {查看当前付费包游玩排行}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
if not webrender:
|
if not webrender:
|
||||||
await msg.finish(['未配置webrender,无法使用此命令。'])
|
await msg.finish(['未配置webrender,无法使用此命令。'])
|
||||||
if msg.parsed_msg.get('free', False):
|
if msg.parsed_msg.get('free', False):
|
||||||
|
@ -240,7 +240,7 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@arc.handle('switch {切换查询时默认优先使用的API接口}')
|
@arc.handle('switch {切换查询时默认优先使用的API接口}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
value = msg.options.get('arc_api', True)
|
value = msg.options.get('arc_api', True)
|
||||||
set_value = msg.data.edit_option('arc_api', not value)
|
set_value = msg.data.edit_option('arc_api', not value)
|
||||||
await msg.finish(f'已切换为{"官方" if not value else "非官方"}API。')
|
await msg.finish(f'已切换为{"官方" if not value else "非官方"}API。')
|
||||||
|
|
|
@ -2,7 +2,7 @@ from typing import Union
|
||||||
|
|
||||||
from tenacity import retry, stop_after_attempt
|
from tenacity import retry, stop_after_attempt
|
||||||
|
|
||||||
from core.elements import MessageSession
|
from core.builtins import Bot
|
||||||
from database import session, auto_rollback_error
|
from database import session, auto_rollback_error
|
||||||
from .orm import ArcBindInfo
|
from .orm import ArcBindInfo
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ from .orm import ArcBindInfo
|
||||||
class ArcBindInfoManager:
|
class ArcBindInfoManager:
|
||||||
@retry(stop=stop_after_attempt(3), reraise=True)
|
@retry(stop=stop_after_attempt(3), reraise=True)
|
||||||
@auto_rollback_error
|
@auto_rollback_error
|
||||||
def __init__(self, msg: MessageSession):
|
def __init__(self, msg: Bot.MessageSession):
|
||||||
self.targetId = msg.target.senderId
|
self.targetId = msg.target.senderId
|
||||||
self.query = session.query(ArcBindInfo).filter_by(targetId=self.targetId).first()
|
self.query = session.query(ArcBindInfo).filter_by(targetId=self.targetId).first()
|
||||||
if self.query is None:
|
if self.query is None:
|
||||||
|
|
|
@ -8,7 +8,7 @@ import uuid
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
from .drawb30img import drawb30
|
from .drawb30img import drawb30
|
||||||
from .drawsongimg import dsimg
|
from .drawsongimg import dsimg
|
||||||
from .utils import autofix_b30_song_background
|
from .utils import autofix_b30_song_background
|
||||||
|
|
|
@ -4,9 +4,9 @@ import traceback
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.elements import Plain, Image
|
from core.builtins import Plain, Image
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
from modules.arcaea.utils import autofix_b30_song_background, errcode
|
from modules.arcaea.utils import autofix_b30_song_background, errcode
|
||||||
|
|
||||||
assets_path = os.path.abspath('./assets/arcaea')
|
assets_path = os.path.abspath('./assets/arcaea')
|
||||||
|
|
|
@ -6,9 +6,9 @@ import traceback
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.elements import Plain
|
from core.builtins import Plain
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
|
|
||||||
assets_path = os.path.abspath('./assets/arcaea')
|
assets_path = os.path.abspath('./assets/arcaea')
|
||||||
apiurl = Config('arcapi_official_url')
|
apiurl = Config('arcapi_official_url')
|
||||||
|
|
|
@ -3,9 +3,9 @@ import traceback
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.elements import Plain
|
from core.builtins import Plain
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
from .utils import errcode
|
from .utils import errcode
|
||||||
|
|
||||||
assets_path = os.path.abspath('./assets/arcaea')
|
assets_path = os.path.abspath('./assets/arcaea')
|
||||||
|
|
|
@ -3,7 +3,7 @@ import shutil
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.utils import get_url, download_to_cache
|
from core.utils.http import get_url, download_to_cache
|
||||||
from .initialize import blur_song_img
|
from .initialize import blur_song_img
|
||||||
|
|
||||||
botarcapi_url = Config("botarcapi_url")
|
botarcapi_url = Config("botarcapi_url")
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command, on_regex
|
from core.component import on_command, on_regex
|
||||||
from .bugtracker import bugtracker_get
|
from .bugtracker import bugtracker_get
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ bug = on_command('bug', alias='b', developers=['OasisAkari'])
|
||||||
|
|
||||||
|
|
||||||
@bug.handle('<MojiraID> {查询Mojira上的漏洞编号内容}')
|
@bug.handle('<MojiraID> {查询Mojira上的漏洞编号内容}')
|
||||||
async def bugtracker(msg: MessageSession):
|
async def bugtracker(msg: Bot.MessageSession):
|
||||||
mojira_id = msg.parsed_msg['<MojiraID>']
|
mojira_id = msg.parsed_msg['<MojiraID>']
|
||||||
if mojira_id:
|
if mojira_id:
|
||||||
q = re.match(r'(.*-.*)', mojira_id)
|
q = re.match(r'(.*-.*)', mojira_id)
|
||||||
|
@ -24,7 +24,7 @@ rbug = on_regex('bug_regex',
|
||||||
|
|
||||||
|
|
||||||
@rbug.handle(pattern=r'^\!(?:bug |)(.*)-(.*)', mode='M')
|
@rbug.handle(pattern=r'^\!(?:bug |)(.*)-(.*)', mode='M')
|
||||||
async def regex_bugtracker(msg: MessageSession):
|
async def regex_bugtracker(msg: Bot.MessageSession):
|
||||||
matched_msg = msg.matched_msg
|
matched_msg = msg.matched_msg
|
||||||
if len(matched_msg.group(1)) < 10 and len(matched_msg.group(2)) < 10:
|
if len(matched_msg.group(1)) < 10 and len(matched_msg.group(2)) < 10:
|
||||||
result = await bugtracker_get(matched_msg.group(1) + '-' + matched_msg.group(2))
|
result = await bugtracker_get(matched_msg.group(1) + '-' + matched_msg.group(2))
|
||||||
|
@ -32,8 +32,8 @@ async def regex_bugtracker(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@rbug.handle(re.compile(r'https://bugs\.mojang\.com/browse/(.*?-\d*)'), mode='A')
|
@rbug.handle(re.compile(r'https://bugs\.mojang\.com/browse/(.*?-\d*)'), mode='A')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
async def bgtask(msg: MessageSession):
|
async def bgtask(msg: Bot.MessageSession):
|
||||||
for title in msg.matched_msg:
|
for title in msg.matched_msg:
|
||||||
await msg.sendMessage(await bugtracker_get(title, nolink=True))
|
await msg.sendMessage(await bugtracker_get(title, nolink=True))
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from core.elements import Url, ErrorMessage
|
from core.builtins import Url, ErrorMessage
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
|
|
||||||
|
|
||||||
async def bugtracker_get(mojiraId: str, nolink=False):
|
async def bugtracker_get(mojiraId: str, nolink=False):
|
||||||
|
|
|
@ -3,7 +3,7 @@ import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.exceptions import NoReportException
|
from core.exceptions import NoReportException
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
|
@ -38,7 +38,7 @@ c = on_command('calc', developers=[
|
||||||
'hex()': '转换为十六进制:hex(268) -> 0x10c',
|
'hex()': '转换为十六进制:hex(268) -> 0x10c',
|
||||||
'更多可用运算符和函数': 'https://bot.teahouse.team/-/340',
|
'更多可用运算符和函数': 'https://bot.teahouse.team/-/340',
|
||||||
})
|
})
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
expr = msg.asDisplay().split(' ', 1)[1]
|
expr = msg.asDisplay().split(' ', 1)[1]
|
||||||
if sys.platform == 'win32' and sys.version_info.minor < 10:
|
if sys.platform == 'win32' and sys.version_info.minor < 10:
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -9,11 +9,12 @@ from PIL import Image as PILImage
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from tenacity import retry, stop_after_attempt
|
from tenacity import retry, stop_after_attempt
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
|
from core.builtins import Image, Plain
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import Image, Plain
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_url, download_to_cache, random_cache_path
|
from core.utils.cache import random_cache_path
|
||||||
|
from core.utils.http import get_url, download_to_cache
|
||||||
|
|
||||||
csr_link = 'https://www.chemspider.com' # ChemSpider 的链接
|
csr_link = 'https://www.chemspider.com' # ChemSpider 的链接
|
||||||
special_id = ["22398", "140526", "4509317", "4509318", "4510681", "4510778", "4512975", "4514248", "4514266", "4514293",
|
special_id = ["22398", "140526", "4509317", "4509318", "4510681", "4510778", "4512975", "4514248", "4514266", "4514293",
|
||||||
|
@ -57,17 +58,17 @@ play_state = {} # 创建一个空字典用于存放游戏状态
|
||||||
|
|
||||||
|
|
||||||
@cc.handle('{普通样式(时间限制,多人)}') # 直接使用 cc 命令将触发此装饰器
|
@cc.handle('{普通样式(时间限制,多人)}') # 直接使用 cc 命令将触发此装饰器
|
||||||
async def chemical_code_by_random(msg: MessageSession):
|
async def chemical_code_by_random(msg: Bot.MessageSession):
|
||||||
await chemical_code(msg) # 将消息会话传入 chemical_code 函数
|
await chemical_code(msg) # 将消息会话传入 chemical_code 函数
|
||||||
|
|
||||||
|
|
||||||
@cc.handle('captcha {验证码样式(不支持指定ID,只限一次,单人)}')
|
@cc.handle('captcha {验证码样式(不支持指定ID,只限一次,单人)}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
await chemical_code(msg, captcha_mode=True)
|
await chemical_code(msg, captcha_mode=True)
|
||||||
|
|
||||||
|
|
||||||
@cc.handle('stop {停止当前的游戏。}')
|
@cc.handle('stop {停止当前的游戏。}')
|
||||||
async def s(msg: MessageSession):
|
async def s(msg: Bot.MessageSession):
|
||||||
state = play_state.get(msg.target.targetId, False) # 尝试获取 play_state 中是否有此对象的游戏状态
|
state = play_state.get(msg.target.targetId, False) # 尝试获取 play_state 中是否有此对象的游戏状态
|
||||||
if state: # 若有
|
if state: # 若有
|
||||||
if state['active']: # 检查是否为活跃状态
|
if state['active']: # 检查是否为活跃状态
|
||||||
|
|
|
@ -3,7 +3,7 @@ from decimal import Decimal
|
||||||
|
|
||||||
from pint import UnitRegistry
|
from pint import UnitRegistry
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
|
|
||||||
ureg = UnitRegistry(os.path.dirname(os.path.abspath(__file__)) +
|
ureg = UnitRegistry(os.path.dirname(os.path.abspath(__file__)) +
|
||||||
|
@ -15,7 +15,7 @@ i = on_command('convert', alias=('conv', 'unit'), desc='全能单位转换。',
|
||||||
|
|
||||||
|
|
||||||
@i.handle('<from_val> <to_unit> {单位转换。大小写敏感。单位原文为英文,由 ChatGPT 翻译生成,欢迎汇报错误。}')
|
@i.handle('<from_val> <to_unit> {单位转换。大小写敏感。单位原文为英文,由 ChatGPT 翻译生成,欢迎汇报错误。}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
from_val = msg.parsed_msg['<from_val>']
|
from_val = msg.parsed_msg['<from_val>']
|
||||||
to_unit = msg.parsed_msg['<to_unit>']
|
to_unit = msg.parsed_msg['<to_unit>']
|
||||||
ori = ureg.parse_expression(from_val)
|
ori = ureg.parse_expression(from_val)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
|
|
||||||
ali = on_command('alias', required_admin=True, base=True)
|
ali = on_command('alias', required_admin=True, base=True)
|
||||||
|
@ -6,7 +6,7 @@ ali = on_command('alias', required_admin=True, base=True)
|
||||||
|
|
||||||
@ali.handle('add <alias> <command> {添加自定义命令别名}', 'remove <alias> {移除自定义命令别名}',
|
@ali.handle('add <alias> <command> {添加自定义命令别名}', 'remove <alias> {移除自定义命令别名}',
|
||||||
'reset {重置自定义命令别名}')
|
'reset {重置自定义命令别名}')
|
||||||
async def set_alias(msg: MessageSession):
|
async def set_alias(msg: Bot.MessageSession):
|
||||||
alias = msg.options.get('command_alias')
|
alias = msg.options.get('command_alias')
|
||||||
arg1 = msg.parsed_msg.get('<alias>', False)
|
arg1 = msg.parsed_msg.get('<alias>', False)
|
||||||
arg2 = msg.parsed_msg.get('<command>', False)
|
arg2 = msg.parsed_msg.get('<command>', False)
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Image, Plain, Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import Command, Image, Plain
|
|
||||||
from core.exceptions import InvalidHelpDocTypeError
|
from core.exceptions import InvalidHelpDocTypeError
|
||||||
from core.loader import ModulesManager
|
from core.loader import ModulesManager
|
||||||
from core.parser.command import CommandParser
|
from core.parser.command import CommandParser
|
||||||
|
from core.types import Command
|
||||||
from core.utils.image_table import ImageTable, image_table_render, web_render
|
from core.utils.image_table import ImageTable, image_table_render, web_render
|
||||||
from database import BotDBUtil
|
from database import BotDBUtil
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ module = on_command('module',
|
||||||
'disable all {关闭所有模块。}',
|
'disable all {关闭所有模块。}',
|
||||||
'reload <module> ... {重载一个/多个模块。}',
|
'reload <module> ... {重载一个/多个模块。}',
|
||||||
'list {查看所有可用模块}'], exclude_from=['QQ|Guild'])
|
'list {查看所有可用模块}'], exclude_from=['QQ|Guild'])
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
if msg.parsed_msg.get('list', False):
|
if msg.parsed_msg.get('list', False):
|
||||||
await modules_help(msg)
|
await modules_help(msg)
|
||||||
await config_modules(msg)
|
await config_modules(msg)
|
||||||
|
@ -38,13 +38,13 @@ async def _(msg: MessageSession):
|
||||||
'reload <module> [-f] {重载一个模块。}',
|
'reload <module> [-f] {重载一个模块。}',
|
||||||
'list {查看所有可用模块}'], options_desc={'-g': '对频道进行全局操作'},
|
'list {查看所有可用模块}'], options_desc={'-g': '对频道进行全局操作'},
|
||||||
available_for=['QQ|Guild'])
|
available_for=['QQ|Guild'])
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
if msg.parsed_msg.get('list', False):
|
if msg.parsed_msg.get('list', False):
|
||||||
await modules_help(msg)
|
await modules_help(msg)
|
||||||
await config_modules(msg)
|
await config_modules(msg)
|
||||||
|
|
||||||
|
|
||||||
async def config_modules(msg: MessageSession):
|
async def config_modules(msg: Bot.MessageSession):
|
||||||
alias = ModulesManager.return_modules_alias_map()
|
alias = ModulesManager.return_modules_alias_map()
|
||||||
modules_ = ModulesManager.return_modules_list_as_dict(
|
modules_ = ModulesManager.return_modules_list_as_dict(
|
||||||
targetFrom=msg.target.targetFrom)
|
targetFrom=msg.target.targetFrom)
|
||||||
|
@ -198,7 +198,7 @@ hlp = on_command('help',
|
||||||
|
|
||||||
|
|
||||||
@hlp.handle('<module> {查看一个模块的详细信息}')
|
@hlp.handle('<module> {查看一个模块的详细信息}')
|
||||||
async def bot_help(msg: MessageSession):
|
async def bot_help(msg: Bot.MessageSession):
|
||||||
module_list = ModulesManager.return_modules_list_as_dict(
|
module_list = ModulesManager.return_modules_list_as_dict(
|
||||||
targetFrom=msg.target.targetFrom)
|
targetFrom=msg.target.targetFrom)
|
||||||
developers = ModulesManager.return_modules_developers_map()
|
developers = ModulesManager.return_modules_developers_map()
|
||||||
|
@ -244,7 +244,7 @@ async def bot_help(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@hlp.handle('{查看帮助列表}')
|
@hlp.handle('{查看帮助列表}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
module_list = ModulesManager.return_modules_list_as_dict(
|
module_list = ModulesManager.return_modules_list_as_dict(
|
||||||
targetFrom=msg.target.targetFrom)
|
targetFrom=msg.target.targetFrom)
|
||||||
target_enabled_list = msg.enabled_modules
|
target_enabled_list = msg.enabled_modules
|
||||||
|
@ -324,7 +324,7 @@ async def _(msg: MessageSession):
|
||||||
await send.delete()
|
await send.delete()
|
||||||
|
|
||||||
|
|
||||||
async def modules_help(msg: MessageSession):
|
async def modules_help(msg: Bot.MessageSession):
|
||||||
module_list = ModulesManager.return_modules_list_as_dict(
|
module_list = ModulesManager.return_modules_list_as_dict(
|
||||||
targetFrom=msg.target.targetFrom)
|
targetFrom=msg.target.targetFrom)
|
||||||
developers = ModulesManager.return_modules_developers_map()
|
developers = ModulesManager.return_modules_developers_map()
|
||||||
|
|
|
@ -9,14 +9,14 @@ import ujson as json
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.builtins import Bot
|
from core.builtins import Bot
|
||||||
|
from core.builtins import PrivateAssets, Image, Plain, ExecutionLockList, Temp
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins.message import MessageSession
|
||||||
|
from core.builtins.tasks import MessageTaskManager
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import PrivateAssets, Image, Plain, ExecutionLockList, Temp
|
|
||||||
from core.loader import ModulesManager
|
from core.loader import ModulesManager
|
||||||
from core.parser.message import remove_temp_ban
|
from core.parser.message import remove_temp_ban
|
||||||
from core.tos import pardon_user, warn_user
|
from core.tos import pardon_user, warn_user
|
||||||
from core.utils.cache import random_cache_path
|
from core.utils.cache import random_cache_path
|
||||||
from core.utils.tasks import MessageTaskManager
|
|
||||||
from database import BotDBUtil
|
from database import BotDBUtil
|
||||||
|
|
||||||
su = on_command('superuser', alias=['su'], developers=['OasisAkari', 'Dianliang233'], required_superuser=True)
|
su = on_command('superuser', alias=['su'], developers=['OasisAkari', 'Dianliang233'], required_superuser=True)
|
||||||
|
@ -281,6 +281,7 @@ async def update_and_restart_bot(msg: MessageSession):
|
||||||
if Bot.FetchTarget.name == 'QQ':
|
if Bot.FetchTarget.name == 'QQ':
|
||||||
resume = on_command('resume', developers=['OasisAkari'], required_superuser=True)
|
resume = on_command('resume', developers=['OasisAkari'], required_superuser=True)
|
||||||
|
|
||||||
|
|
||||||
@resume.handle()
|
@resume.handle()
|
||||||
async def resume_sending_group_message(msg: MessageSession):
|
async def resume_sending_group_message(msg: MessageSession):
|
||||||
if targets := Temp.data['waiting_for_send_group_message']:
|
if targets := Temp.data['waiting_for_send_group_message']:
|
||||||
|
@ -292,7 +293,6 @@ if Bot.FetchTarget.name == 'QQ':
|
||||||
else:
|
else:
|
||||||
await msg.sendMessage('没有需要重发的消息。')
|
await msg.sendMessage('没有需要重发的消息。')
|
||||||
|
|
||||||
|
|
||||||
echo = on_command('echo', developers=['OasisAkari'], required_superuser=True)
|
echo = on_command('echo', developers=['OasisAkari'], required_superuser=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,9 @@ from datetime import datetime
|
||||||
import psutil
|
import psutil
|
||||||
from cpuinfo import get_cpu_info
|
from cpuinfo import get_cpu_info
|
||||||
|
|
||||||
|
from core.builtins import PrivateAssets
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins.message import MessageSession
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import PrivateAssets
|
|
||||||
from core.utils.i18n import get_available_locales, get_target_locale
|
from core.utils.i18n import get_available_locales, get_target_locale
|
||||||
from database import BotDBUtil
|
from database import BotDBUtil
|
||||||
|
|
||||||
|
@ -86,7 +86,8 @@ admin = on_command('admin',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@admin.handle(['add <UserID> {设置成员为机器人管理员,实现不设置成员为群聊管理员的情况下管理机器人的功能。已是群聊管理员无需设置此项目。}',
|
@admin.handle([
|
||||||
|
'add <UserID> {设置成员为机器人管理员,实现不设置成员为群聊管理员的情况下管理机器人的功能。已是群聊管理员无需设置此项目。}',
|
||||||
'del <UserID> {取消成员的机器人管理员}',
|
'del <UserID> {取消成员的机器人管理员}',
|
||||||
'list {列出所有机器人管理员}'])
|
'list {列出所有机器人管理员}'])
|
||||||
async def config_gu(msg: MessageSession):
|
async def config_gu(msg: MessageSession):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
|
from core.builtins import Image
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import Image
|
|
||||||
from database import BotDBUtil
|
from database import BotDBUtil
|
||||||
from .dbutils import CytoidBindInfoManager
|
from .dbutils import CytoidBindInfoManager
|
||||||
from .profile import cytoid_profile
|
from .profile import cytoid_profile
|
||||||
|
@ -12,13 +12,13 @@ cytoid = on_command('cytoid',
|
||||||
|
|
||||||
|
|
||||||
@cytoid.handle('profile [<UserID>] {查询一个用户的基本信息}')
|
@cytoid.handle('profile [<UserID>] {查询一个用户的基本信息}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
if msg.parsed_msg['profile']:
|
if msg.parsed_msg['profile']:
|
||||||
await cytoid_profile(msg)
|
await cytoid_profile(msg)
|
||||||
|
|
||||||
|
|
||||||
@cytoid.handle('(b30|r30) [<UserID>] {查询一个用户的b30/r30记录}')
|
@cytoid.handle('(b30|r30) [<UserID>] {查询一个用户的b30/r30记录}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
if 'b30' in msg.parsed_msg:
|
if 'b30' in msg.parsed_msg:
|
||||||
query = 'b30'
|
query = 'b30'
|
||||||
elif 'r30' in msg.parsed_msg:
|
elif 'r30' in msg.parsed_msg:
|
||||||
|
@ -53,7 +53,7 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@cytoid.handle('bind <username> {绑定一个Cytoid用户}')
|
@cytoid.handle('bind <username> {绑定一个Cytoid用户}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
code: str = msg.parsed_msg['<username>']
|
code: str = msg.parsed_msg['<username>']
|
||||||
getcode = await get_profile_name(code)
|
getcode = await get_profile_name(code)
|
||||||
if getcode:
|
if getcode:
|
||||||
|
@ -69,7 +69,7 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@cytoid.handle('unbind {取消绑定用户}')
|
@cytoid.handle('unbind {取消绑定用户}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
unbind = CytoidBindInfoManager(msg).remove_bind_info()
|
unbind = CytoidBindInfoManager(msg).remove_bind_info()
|
||||||
if unbind:
|
if unbind:
|
||||||
await msg.finish('取消绑定成功。')
|
await msg.finish('取消绑定成功。')
|
||||||
|
|
|
@ -2,7 +2,7 @@ from typing import Union
|
||||||
|
|
||||||
from tenacity import retry, stop_after_attempt
|
from tenacity import retry, stop_after_attempt
|
||||||
|
|
||||||
from core.elements import MessageSession
|
from core.builtins import Bot
|
||||||
from database import session, auto_rollback_error
|
from database import session, auto_rollback_error
|
||||||
from .orm import CytoidBindInfo
|
from .orm import CytoidBindInfo
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ from .orm import CytoidBindInfo
|
||||||
class CytoidBindInfoManager:
|
class CytoidBindInfoManager:
|
||||||
@retry(stop=stop_after_attempt(3), reraise=True)
|
@retry(stop=stop_after_attempt(3), reraise=True)
|
||||||
@auto_rollback_error
|
@auto_rollback_error
|
||||||
def __init__(self, msg: MessageSession):
|
def __init__(self, msg: Bot.MessageSession):
|
||||||
self.targetId = msg.target.senderId
|
self.targetId = msg.target.senderId
|
||||||
self.query = session.query(CytoidBindInfo).filter_by(targetId=self.targetId).first()
|
self.query = session.query(CytoidBindInfo).filter_by(targetId=self.targetId).first()
|
||||||
if self.query is None:
|
if self.query is None:
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
import ujson as json
|
import ujson as json
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.elements import Plain, Image
|
from core.builtins import Plain, Image
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
from .dbutils import CytoidBindInfoManager
|
from .dbutils import CytoidBindInfoManager
|
||||||
|
|
||||||
|
|
||||||
async def cytoid_profile(msg: MessageSession):
|
async def cytoid_profile(msg: Bot.MessageSession):
|
||||||
pat = msg.parsed_msg.get('<UserID>', False)
|
pat = msg.parsed_msg.get('<UserID>', False)
|
||||||
if pat:
|
if pat:
|
||||||
query_id = pat
|
query_id = pat
|
||||||
|
|
|
@ -15,7 +15,7 @@ from gql.transport.aiohttp import AIOHTTPTransport
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
|
|
||||||
|
|
||||||
async def get_rating(uid, query_type):
|
async def get_rating(uid, query_type):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import ujson as json
|
import ujson as json
|
||||||
|
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
|
|
||||||
|
|
||||||
async def get_profile_name(userid):
|
async def get_profile_name(userid):
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot, Image, Plain
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import Image, Plain
|
|
||||||
from .screenshot import get_pic
|
from .screenshot import get_pic
|
||||||
|
|
||||||
dict_module = on_command('dictionary', alias=["dict"],
|
dict_module = on_command('dictionary', alias=["dict"],
|
||||||
|
@ -8,7 +7,7 @@ dict_module = on_command('dictionary', alias=["dict"],
|
||||||
|
|
||||||
|
|
||||||
@dict_module.handle(help_doc='<term> {在科林斯词典中查询单词,暂仅支持英文}')
|
@dict_module.handle(help_doc='<term> {在科林斯词典中查询单词,暂仅支持英文}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
print(str(msg.parsed_msg['<term>']).replace(' ', '-').lower())
|
print(str(msg.parsed_msg['<term>']).replace(' ', '-').lower())
|
||||||
pic_collins = await get_pic(
|
pic_collins = await get_pic(
|
||||||
'https://www.collinsdictionary.com/dictionary/english/' + str(msg.parsed_msg['<term>']).replace(' ',
|
'https://www.collinsdictionary.com/dictionary/english/' + str(msg.parsed_msg['<term>']).replace(' ',
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot, Embed, Image, EmbedField
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import Embed, Image, EmbedField
|
|
||||||
|
|
||||||
t = on_command('embed_test', required_superuser=True)
|
t = on_command('embed_test', required_superuser=True)
|
||||||
|
|
||||||
|
|
||||||
@t.handle()
|
@t.handle()
|
||||||
async def _(session: MessageSession):
|
async def _(session: Bot.MessageSession):
|
||||||
await session.sendMessage(Embed(title='Embed Test', description='This is a test embed.',
|
await session.sendMessage(Embed(title='Embed Test', description='This is a test embed.',
|
||||||
url='https://minecraft.fandom.com/zh/wiki/Minecraft_Wiki',
|
url='https://minecraft.fandom.com/zh/wiki/Minecraft_Wiki',
|
||||||
color=0x00ff00, timestamp=datetime.datetime.now().timestamp(),
|
color=0x00ff00, timestamp=datetime.datetime.now().timestamp(),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from modules.github import repo, user, search
|
from modules.github import repo, user, search
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ github = on_command('github', alias=['gh'], developers=['Dianliang233'])
|
||||||
|
|
||||||
|
|
||||||
@github.handle('<name> {尝试自动识别并区分 repo/user}')
|
@github.handle('<name> {尝试自动识别并区分 repo/user}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
if '/' in msg.parsed_msg['<name>']:
|
if '/' in msg.parsed_msg['<name>']:
|
||||||
await repo.repo(msg)
|
await repo.repo(msg)
|
||||||
else:
|
else:
|
||||||
|
@ -14,15 +14,15 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@github.handle('repo <name> {获取 GitHub 仓库信息}')
|
@github.handle('repo <name> {获取 GitHub 仓库信息}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
await repo.repo(msg)
|
await repo.repo(msg)
|
||||||
|
|
||||||
|
|
||||||
@github.handle(['user <name> {获取 GitHub 用户或组织信息}', 'org <name> {~github user 的别名}'])
|
@github.handle(['user <name> {获取 GitHub 用户或组织信息}', 'org <name> {~github user 的别名}'])
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
await user.user(msg)
|
await user.user(msg)
|
||||||
|
|
||||||
|
|
||||||
@github.handle('search <query> {搜索 GitHub 上的仓库}')
|
@github.handle('search <query> {搜索 GitHub 上的仓库}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
await search.search(msg)
|
await search.search(msg)
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.elements import Image, Plain, Url, ErrorMessage
|
from core.builtins import Image, Plain, Url, ErrorMessage
|
||||||
from core.utils import get_url, download_to_cache
|
from core.utils.http import get_url, download_to_cache
|
||||||
from modules.github.utils import time_diff, dirty_check, darkCheck
|
from modules.github.utils import time_diff, dirty_check, darkCheck
|
||||||
|
|
||||||
|
|
||||||
async def repo(msg: MessageSession):
|
async def repo(msg: Bot.MessageSession):
|
||||||
try:
|
try:
|
||||||
result = await get_url('https://api.github.com/repos/' + msg.parsed_msg['<name>'], 200, fmt='json')
|
result = await get_url('https://api.github.com/repos/' + msg.parsed_msg['<name>'], 200, fmt='json')
|
||||||
if 'message' in result and result['message'] == 'Not Found':
|
if 'message' in result and result['message'] == 'Not Found':
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot, Url, ErrorMessage
|
||||||
from core.elements import Url, ErrorMessage
|
from core.utils.http import get_url
|
||||||
from core.utils import get_url
|
|
||||||
from modules.github.utils import dirty_check, darkCheck
|
from modules.github.utils import dirty_check, darkCheck
|
||||||
|
|
||||||
|
|
||||||
async def search(msg: MessageSession):
|
async def search(msg: Bot.MessageSession):
|
||||||
try:
|
try:
|
||||||
result = await get_url('https://api.github.com/search/repositories?q=' + msg.parsed_msg['<query>'], 200,
|
result = await get_url('https://api.github.com/search/repositories?q=' + msg.parsed_msg['<query>'], 200,
|
||||||
fmt='json')
|
fmt='json')
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Url, ErrorMessage, Bot
|
||||||
from core.elements import Url, ErrorMessage
|
from core.utils.http import get_url
|
||||||
from core.utils import get_url
|
|
||||||
from modules.github.utils import time_diff, dirty_check, darkCheck
|
from modules.github.utils import time_diff, dirty_check, darkCheck
|
||||||
|
|
||||||
|
|
||||||
async def user(msg: MessageSession):
|
async def user(msg: Bot.MessageSession):
|
||||||
try:
|
try:
|
||||||
result = await get_url('https://api.github.com/users/' + msg.parsed_msg['<name>'], 200, fmt='json')
|
result = await get_url('https://api.github.com/users/' + msg.parsed_msg['<name>'], 200, fmt='json')
|
||||||
if 'message' in result and result['message'] == 'Not Found':
|
if 'message' in result and result['message'] == 'Not Found':
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
# https://github.com/XeroAlpha/caidlist/blob/master/backend/API.md
|
# https://github.com/XeroAlpha/caidlist/blob/master/backend/API.md
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
|
|
||||||
api = 'https://ca.projectxero.top/idlist/search'
|
api = 'https://ca.projectxero.top/idlist/search'
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ i = on_command('idlist')
|
||||||
|
|
||||||
|
|
||||||
@i.handle('<query> {查询MCBEID表。}')
|
@i.handle('<query> {查询MCBEID表。}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
query = msg.parsed_msg['<query>']
|
query = msg.parsed_msg['<query>']
|
||||||
query_options = {'q': query, 'limit': '6'}
|
query_options = {'q': query, 'limit': '6'}
|
||||||
query_url = api + '?' + urllib.parse.urlencode(query_options)
|
query_url = api + '?' + urllib.parse.urlencode(query_options)
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot, Plain, Image as BImage
|
||||||
from core.component import on_command, on_regex
|
from core.component import on_command, on_regex
|
||||||
from core.elements import Plain, Image as BImage
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from modules.maimai.libraries.image import *
|
from modules.maimai.libraries.image import *
|
||||||
from modules.maimai.libraries.maimai_best_40 import generate
|
from modules.maimai.libraries.maimai_best_40 import generate
|
||||||
|
@ -38,7 +37,7 @@ mai = on_command('maimai', developers=['mai-bot', 'OasisAkari'], alias=['mai'],
|
||||||
|
|
||||||
@mai.handle(['inner <rating> {根据定数查询对应歌曲}',
|
@mai.handle(['inner <rating> {根据定数查询对应歌曲}',
|
||||||
'inner <rating_min> <rating_max> {根据定数查询对应歌曲}'])
|
'inner <rating_min> <rating_max> {根据定数查询对应歌曲}'])
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
if '<rating>' in msg.parsed_msg:
|
if '<rating>' in msg.parsed_msg:
|
||||||
result_set = await inner_level_q(float(msg.parsed_msg['<rating>']))
|
result_set = await inner_level_q(float(msg.parsed_msg['<rating>']))
|
||||||
else:
|
else:
|
||||||
|
@ -57,7 +56,7 @@ mrgex1 = on_regex('maimai_random_music_regex1',
|
||||||
|
|
||||||
|
|
||||||
@mrgex1.handle(r"随个((?:dx|sd|标准))?([绿黄红紫白]?)([0-9]+\+?)")
|
@mrgex1.handle(r"随个((?:dx|sd|标准))?([绿黄红紫白]?)([0-9]+\+?)")
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
res = msg.matched_msg
|
res = msg.matched_msg
|
||||||
if res:
|
if res:
|
||||||
try:
|
try:
|
||||||
|
@ -89,7 +88,7 @@ mrgex2 = on_regex('maimai_random_music_regex2', desc='打开后将在发送的
|
||||||
|
|
||||||
|
|
||||||
@mrgex2.handle(r".*maimai.*什么", )
|
@mrgex2.handle(r".*maimai.*什么", )
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
await msg.finish(song_txt((await total_list.get()).random()))
|
await msg.finish(song_txt((await total_list.get()).random()))
|
||||||
|
|
||||||
|
|
||||||
|
@ -99,7 +98,7 @@ msrgex = on_regex('maimai_search_music_regex', desc='打开后将在发送的聊
|
||||||
|
|
||||||
|
|
||||||
@msrgex.handle(r"查歌(.+)")
|
@msrgex.handle(r"查歌(.+)")
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
name = msg.matched_msg.groups()[0].strip()
|
name = msg.matched_msg.groups()[0].strip()
|
||||||
if name == "":
|
if name == "":
|
||||||
return
|
return
|
||||||
|
@ -121,7 +120,7 @@ mqrgex = on_regex('maimai_query_chart_regex',
|
||||||
|
|
||||||
|
|
||||||
@msrgex.handle(r"([绿黄红紫白]?)id([0-9]+)")
|
@msrgex.handle(r"([绿黄红紫白]?)id([0-9]+)")
|
||||||
async def _(message: MessageSession):
|
async def _(message: Bot.MessageSession):
|
||||||
groups = message.matched_msg.groups()
|
groups = message.matched_msg.groups()
|
||||||
level_labels = ['绿', '黄', '红', '紫', '白']
|
level_labels = ['绿', '黄', '红', '紫', '白']
|
||||||
if groups[0] != "":
|
if groups[0] != "":
|
||||||
|
@ -172,7 +171,7 @@ wm_list = ['拼机', '推分', '越级', '下埋', '夜勤', '练底力', '练
|
||||||
|
|
||||||
|
|
||||||
@mai.handle('today {查看今天的舞萌运势}')
|
@mai.handle('today {查看今天的舞萌运势}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
if msg.target.senderFrom == "Discord|Client":
|
if msg.target.senderFrom == "Discord|Client":
|
||||||
qq = int(msg.session.sender.id)
|
qq = int(msg.session.sender.id)
|
||||||
else:
|
else:
|
||||||
|
@ -196,7 +195,7 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
@mai.handle(['scoreline <difficulty+sid> <scoreline> {查找某首歌的分数线}',
|
@mai.handle(['scoreline <difficulty+sid> <scoreline> {查找某首歌的分数线}',
|
||||||
'scoreline help {查看分数线帮助}'])
|
'scoreline help {查看分数线帮助}'])
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
r = "([绿黄红紫白])(id)?([0-9]+)"
|
r = "([绿黄红紫白])(id)?([0-9]+)"
|
||||||
arg1 = msg.parsed_msg.get('<difficulty+sid>')
|
arg1 = msg.parsed_msg.get('<difficulty+sid>')
|
||||||
args2 = msg.parsed_msg.get('<scoreline>')
|
args2 = msg.parsed_msg.get('<scoreline>')
|
||||||
|
@ -245,7 +244,7 @@ BREAK 50落(一共{brk}个)等价于 {(break_50_reduce / 100):.3f} 个 TAP GREAT
|
||||||
|
|
||||||
|
|
||||||
@mai.handle('b40 <username> {查询B40信息(仅限大陆版maimai使用)}')
|
@mai.handle('b40 <username> {查询B40信息(仅限大陆版maimai使用)}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
username = msg.parsed_msg['<username>']
|
username = msg.parsed_msg['<username>']
|
||||||
if username == "":
|
if username == "":
|
||||||
payload = {'qq': msg.session.sender}
|
payload = {'qq': msg.session.sender}
|
||||||
|
@ -263,7 +262,7 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@mai.handle('b50 <username> {查询B50信息(仅限大陆版maimai使用)}')
|
@mai.handle('b50 <username> {查询B50信息(仅限大陆版maimai使用)}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
username = msg.parsed_msg['<username>']
|
username = msg.parsed_msg['<username>']
|
||||||
if username == "":
|
if username == "":
|
||||||
payload = {'qq': msg.session.sender, 'b50': True}
|
payload = {'qq': msg.session.sender, 'b50': True}
|
||||||
|
|
|
@ -2,7 +2,7 @@ import random
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from typing import Dict, List, Optional, Union, Tuple, Any
|
from typing import Dict, List, Optional, Union, Tuple, Any
|
||||||
|
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
|
|
||||||
|
|
||||||
def get_cover_len4_id(mid) -> str:
|
def get_cover_len4_id(mid) -> str:
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot, Url
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import Url
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from .mcbbs_news import news
|
from .mcbbs_news import news
|
||||||
|
|
||||||
|
@ -12,7 +11,7 @@ mcbbs_news = on_command(
|
||||||
|
|
||||||
|
|
||||||
@mcbbs_news.handle('{获得 MCBBS 幻翼快讯版最新新闻(未被版主高亮过的新闻将被忽略)}')
|
@mcbbs_news.handle('{获得 MCBBS 幻翼快讯版最新新闻(未被版主高亮过的新闻将被忽略)}')
|
||||||
async def main(msg: MessageSession):
|
async def main(msg: Bot.MessageSession):
|
||||||
res = await news()
|
res = await news()
|
||||||
Logger.debug('res' + str(res))
|
Logger.debug('res' + str(res))
|
||||||
if res is None:
|
if res is None:
|
||||||
|
|
|
@ -3,9 +3,9 @@ import datetime
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.elements import Url
|
from core.builtins import Url
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
|
|
||||||
|
|
||||||
async def news():
|
async def news():
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from .mcmod import mcmod as m
|
from .mcmod import mcmod as m
|
||||||
|
|
||||||
|
@ -11,12 +11,12 @@ mcmod = on_command(
|
||||||
|
|
||||||
|
|
||||||
@mcmod.handle('<mod_name> {通过模组名获取模组简介及链接,可使用无歧义简写和准确中文。}')
|
@mcmod.handle('<mod_name> {通过模组名获取模组简介及链接,可使用无歧义简写和准确中文。}')
|
||||||
async def main(msg: MessageSession):
|
async def main(msg: Bot.MessageSession):
|
||||||
message = await m(msg.parsed_msg['<mod_name>'])
|
message = await m(msg.parsed_msg['<mod_name>'])
|
||||||
await msg.finish(message)
|
await msg.finish(message)
|
||||||
|
|
||||||
|
|
||||||
@mcmod.handle('details <content> {通过 Mod 内容的名称获取模组简介及链接,可使用物品/方块/实体的 ID 或准确中文。}')
|
@mcmod.handle('details <content> {通过 Mod 内容的名称获取模组简介及链接,可使用物品/方块/实体的 ID 或准确中文。}')
|
||||||
async def main(msg: MessageSession):
|
async def main(msg: Bot.MessageSession):
|
||||||
message = await m(msg.parsed_msg['<content>'], detail=True)
|
message = await m(msg.parsed_msg['<content>'], detail=True)
|
||||||
await msg.finish(message)
|
await msg.finish(message)
|
||||||
|
|
|
@ -3,9 +3,9 @@ from urllib.parse import quote
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.elements import Url
|
from core.builtins import Url
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
|
|
||||||
api = 'https://search.mcmod.cn/s?key='
|
api = 'https://search.mcmod.cn/s?key='
|
||||||
api_details = 'https://search.mcmod.cn/s?filter=3&key='
|
api_details = 'https://search.mcmod.cn/s?filter=3&key='
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
|
from core.builtins import Plain, Image, Url
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import Plain, Image, Url
|
|
||||||
from .mojang_api import *
|
from .mojang_api import *
|
||||||
|
|
||||||
mcplayer = on_command(
|
mcplayer = on_command(
|
||||||
|
@ -11,7 +11,7 @@ mcplayer = on_command(
|
||||||
|
|
||||||
|
|
||||||
@mcplayer.handle('<username_or_uuid> {通过玩家名或玩家 UUID 获取玩家信息。}')
|
@mcplayer.handle('<username_or_uuid> {通过玩家名或玩家 UUID 获取玩家信息。}')
|
||||||
async def main(msg: MessageSession):
|
async def main(msg: Bot.MessageSession):
|
||||||
arg = msg.parsed_msg['<username_or_uuid>']
|
arg = msg.parsed_msg['<username_or_uuid>']
|
||||||
try:
|
try:
|
||||||
if len(arg) == 32:
|
if len(arg) == 32:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import ujson as json
|
import ujson as json
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
from core.utils import get_url, download_to_cache
|
from core.utils.http import get_url, download_to_cache
|
||||||
|
|
||||||
|
|
||||||
async def uuid_to_name(uuid):
|
async def uuid_to_name(uuid):
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from .mcv import mcv, mcbv, mcdv, mcev
|
from .mcv import mcv, mcbv, mcdv, mcev
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ m = on_command(
|
||||||
|
|
||||||
|
|
||||||
@m.handle('{查询当前Minecraft Java版启动器内最新版本。}')
|
@m.handle('{查询当前Minecraft Java版启动器内最新版本。}')
|
||||||
async def mcv_loader(msg: MessageSession):
|
async def mcv_loader(msg: Bot.MessageSession):
|
||||||
await msg.finish(await mcv())
|
await msg.finish(await mcv())
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ mb = on_command(
|
||||||
|
|
||||||
|
|
||||||
@mb.handle('{查询当前Minecraft 基岩版Jira内记录的最新版本。}')
|
@mb.handle('{查询当前Minecraft 基岩版Jira内记录的最新版本。}')
|
||||||
async def mcbv_loader(msg: MessageSession):
|
async def mcbv_loader(msg: Bot.MessageSession):
|
||||||
await msg.finish(await mcbv())
|
await msg.finish(await mcbv())
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ md = on_command(
|
||||||
|
|
||||||
|
|
||||||
@md.handle('{查询当前Minecraft Dungeons Jira内记录的最新版本。}')
|
@md.handle('{查询当前Minecraft Dungeons Jira内记录的最新版本。}')
|
||||||
async def mcdv_loader(msg: MessageSession):
|
async def mcdv_loader(msg: Bot.MessageSession):
|
||||||
await msg.finish(await mcdv())
|
await msg.finish(await mcdv())
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,5 +40,5 @@ me = on_command(
|
||||||
|
|
||||||
|
|
||||||
@me.handle('{查询当前Minecraft教育版Windows版记录的最新版本。}')
|
@me.handle('{查询当前Minecraft教育版Windows版记录的最新版本。}')
|
||||||
async def mcev_loader(msg: MessageSession):
|
async def mcev_loader(msg: Bot.MessageSession):
|
||||||
await msg.finish(await mcev())
|
await msg.finish(await mcev())
|
||||||
|
|
|
@ -3,9 +3,10 @@ import re
|
||||||
|
|
||||||
from google_play_scraper import app as google_play_scraper
|
from google_play_scraper import app as google_play_scraper
|
||||||
|
|
||||||
from core.elements import ErrorMessage
|
from core.builtins import ErrorMessage
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_url, IP
|
from core.utils.http import get_url
|
||||||
|
from core.utils.ip import IP
|
||||||
|
|
||||||
|
|
||||||
async def mcv():
|
async def mcv():
|
||||||
|
|
|
@ -7,10 +7,13 @@ from bs4 import BeautifulSoup
|
||||||
from google_play_scraper import app as google_play_scraper
|
from google_play_scraper import app as google_play_scraper
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
|
from core.builtins import Bot
|
||||||
from core.component import on_schedule
|
from core.component import on_schedule
|
||||||
from core.elements import FetchTarget, IntervalTrigger
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_stored_list, update_stored_list, get_url, IP
|
from core.scheduler import IntervalTrigger
|
||||||
|
from core.utils.http import get_url
|
||||||
|
from core.utils.ip import IP
|
||||||
|
from core.utils.storedata import get_stored_list, update_stored_list
|
||||||
|
|
||||||
|
|
||||||
async def get_article(version):
|
async def get_article(version):
|
||||||
|
@ -64,7 +67,7 @@ trigger_times = 60 if not Config('slower_schedule') else 180
|
||||||
recommend_modules=['mcv_jira_rss', 'mcbv_jira_rss', 'mcdv_jira_rss'],
|
recommend_modules=['mcv_jira_rss', 'mcbv_jira_rss', 'mcdv_jira_rss'],
|
||||||
trigger=IntervalTrigger(seconds=trigger_times),
|
trigger=IntervalTrigger(seconds=trigger_times),
|
||||||
desc='开启后当Minecraft启动器更新Java版Minecraft时将会自动推送消息。', alias='mcvrss')
|
desc='开启后当Minecraft启动器更新Java版Minecraft时将会自动推送消息。', alias='mcvrss')
|
||||||
async def mcv_rss(bot: FetchTarget):
|
async def mcv_rss(bot: Bot.FetchTarget):
|
||||||
url = 'https://piston-meta.mojang.com/mc/game/version_manifest.json'
|
url = 'https://piston-meta.mojang.com/mc/game/version_manifest.json'
|
||||||
try:
|
try:
|
||||||
verlist = get_stored_list(bot, 'mcv_rss')
|
verlist = get_stored_list(bot, 'mcv_rss')
|
||||||
|
@ -103,7 +106,7 @@ async def mcv_rss(bot: FetchTarget):
|
||||||
recommend_modules=['mcbv_jira_rss'],
|
recommend_modules=['mcbv_jira_rss'],
|
||||||
trigger=IntervalTrigger(seconds=180),
|
trigger=IntervalTrigger(seconds=180),
|
||||||
desc='开启后当Minecraft基岩版商店更新时将会自动推送消息。', alias='mcbvrss')
|
desc='开启后当Minecraft基岩版商店更新时将会自动推送消息。', alias='mcbvrss')
|
||||||
async def mcbv_rss(bot: FetchTarget):
|
async def mcbv_rss(bot: Bot.FetchTarget):
|
||||||
if IP.country == 'China':
|
if IP.country == 'China':
|
||||||
return # 中国大陆无法访问Google Play商店
|
return # 中国大陆无法访问Google Play商店
|
||||||
try:
|
try:
|
||||||
|
@ -122,7 +125,7 @@ async def mcbv_rss(bot: FetchTarget):
|
||||||
recommend_modules=['mcv_rss', 'mcbv_jira_rss', 'mcdv_jira_rss'],
|
recommend_modules=['mcv_rss', 'mcbv_jira_rss', 'mcdv_jira_rss'],
|
||||||
trigger=IntervalTrigger(seconds=trigger_times),
|
trigger=IntervalTrigger(seconds=trigger_times),
|
||||||
desc='开启后当Jira更新Java版时将会自动推送消息。', alias='mcvjirarss')
|
desc='开启后当Jira更新Java版时将会自动推送消息。', alias='mcvjirarss')
|
||||||
async def mcv_jira_rss(bot: FetchTarget):
|
async def mcv_jira_rss(bot: Bot.FetchTarget):
|
||||||
try:
|
try:
|
||||||
verlist = get_stored_list(bot, 'mcv_jira_rss')
|
verlist = get_stored_list(bot, 'mcv_jira_rss')
|
||||||
file = json.loads(await get_url('https://bugs.mojang.com/rest/api/2/project/10400/versions', 200, attempt=1))
|
file = json.loads(await get_url('https://bugs.mojang.com/rest/api/2/project/10400/versions', 200, attempt=1))
|
||||||
|
@ -156,7 +159,7 @@ async def mcv_jira_rss(bot: FetchTarget):
|
||||||
recommend_modules=['mcv_rss', 'mcv_jira_rss', 'mcdv_jira_rss'],
|
recommend_modules=['mcv_rss', 'mcv_jira_rss', 'mcdv_jira_rss'],
|
||||||
trigger=IntervalTrigger(seconds=trigger_times),
|
trigger=IntervalTrigger(seconds=trigger_times),
|
||||||
desc='开启后当Jira更新基岩版时将会自动推送消息。', alias='mcbvjirarss')
|
desc='开启后当Jira更新基岩版时将会自动推送消息。', alias='mcbvjirarss')
|
||||||
async def mcbv_jira_rss(bot: FetchTarget):
|
async def mcbv_jira_rss(bot: Bot.FetchTarget):
|
||||||
try:
|
try:
|
||||||
verlist = get_stored_list(bot, 'mcbv_jira_rss')
|
verlist = get_stored_list(bot, 'mcbv_jira_rss')
|
||||||
file = json.loads(await get_url('https://bugs.mojang.com/rest/api/2/project/10200/versions', 200, attempt=1))
|
file = json.loads(await get_url('https://bugs.mojang.com/rest/api/2/project/10200/versions', 200, attempt=1))
|
||||||
|
@ -185,7 +188,7 @@ async def mcbv_jira_rss(bot: FetchTarget):
|
||||||
recommend_modules=['mcv_rss', 'mcbv_jira_rss', 'mcv_jira_rss'],
|
recommend_modules=['mcv_rss', 'mcbv_jira_rss', 'mcv_jira_rss'],
|
||||||
trigger=IntervalTrigger(seconds=trigger_times),
|
trigger=IntervalTrigger(seconds=trigger_times),
|
||||||
desc='开启后当Jira更新Dungeons版本时将会自动推送消息。', alias='mcdvjirarss')
|
desc='开启后当Jira更新Dungeons版本时将会自动推送消息。', alias='mcdvjirarss')
|
||||||
async def mcdv_jira_rss(bot: FetchTarget):
|
async def mcdv_jira_rss(bot: Bot.FetchTarget):
|
||||||
try:
|
try:
|
||||||
verlist = get_stored_list(bot, 'mcdv_jira_rss')
|
verlist = get_stored_list(bot, 'mcdv_jira_rss')
|
||||||
file = json.loads(await get_url('https://bugs.mojang.com/rest/api/2/project/11901/versions', 200, attempt=1))
|
file = json.loads(await get_url('https://bugs.mojang.com/rest/api/2/project/11901/versions', 200, attempt=1))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.dirty_check import check
|
from core.dirty_check import check
|
||||||
from modules.meme.jiki import jiki
|
from modules.meme.jiki import jiki
|
||||||
|
@ -15,7 +15,7 @@ meme = on_command(
|
||||||
|
|
||||||
|
|
||||||
@meme.handle(help_doc='<term> {在萌娘百科、nbnhhsh、Urban Dictionary 中查询梗}')
|
@meme.handle(help_doc='<term> {在萌娘百科、nbnhhsh、Urban Dictionary 中查询梗}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
res_jiki = await jiki(msg.parsed_msg['<term>'])
|
res_jiki = await jiki(msg.parsed_msg['<term>'])
|
||||||
res_moegirl = await moegirl(msg.parsed_msg['<term>'])
|
res_moegirl = await moegirl(msg.parsed_msg['<term>'])
|
||||||
res_nbnhhsh = await nbnhhsh(msg.parsed_msg['<term>'])
|
res_nbnhhsh = await nbnhhsh(msg.parsed_msg['<term>'])
|
||||||
|
|
|
@ -3,9 +3,9 @@ import traceback
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.elements import Url
|
from core.builtins import Url
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
|
|
||||||
|
|
||||||
async def jiki(term: str):
|
async def jiki(term: str):
|
||||||
|
|
|
@ -3,7 +3,7 @@ import traceback
|
||||||
import ujson as json
|
import ujson as json
|
||||||
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import post_url
|
from core.utils.http import post_url
|
||||||
|
|
||||||
|
|
||||||
async def nbnhhsh(term: str):
|
async def nbnhhsh(term: str):
|
||||||
|
|
|
@ -3,9 +3,9 @@ import traceback
|
||||||
import ujson as json
|
import ujson as json
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from core.elements import Url
|
from core.builtins import Url
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
|
|
||||||
|
|
||||||
async def urban(term: str):
|
async def urban(term: str):
|
||||||
|
|
|
@ -6,10 +6,12 @@ from urllib.parse import quote
|
||||||
import ujson as json
|
import ujson as json
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
|
from core.builtins import Url, Bot
|
||||||
from core.component import on_schedule
|
from core.component import on_schedule
|
||||||
from core.elements import FetchTarget, IntervalTrigger, Url
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_url, get_stored_list, update_stored_list
|
from core.scheduler import IntervalTrigger
|
||||||
|
from core.utils.http import get_url
|
||||||
|
from core.utils.storedata import get_stored_list, update_stored_list
|
||||||
|
|
||||||
|
|
||||||
class Article:
|
class Article:
|
||||||
|
@ -42,7 +44,7 @@ class Article:
|
||||||
recommend_modules=['feedback_news'],
|
recommend_modules=['feedback_news'],
|
||||||
trigger=IntervalTrigger(seconds=60 if not Config('slower_schedule') else 180),
|
trigger=IntervalTrigger(seconds=60 if not Config('slower_schedule') else 180),
|
||||||
desc='开启后将会自动推送来自Minecraft官网的新闻。', alias='minecraftnews')
|
desc='开启后将会自动推送来自Minecraft官网的新闻。', alias='minecraftnews')
|
||||||
async def start_check_news(bot: FetchTarget):
|
async def start_check_news(bot: Bot.FetchTarget):
|
||||||
baseurl = 'https://www.minecraft.net'
|
baseurl = 'https://www.minecraft.net'
|
||||||
url = quote(
|
url = quote(
|
||||||
f'https://www.minecraft.net/content/minecraft-net/_jcr_content.articles.grid?tileselection=auto&tagsPath={",".join(Article.random_tags())}&offset=0&pageSize={Article.count}')
|
f'https://www.minecraft.net/content/minecraft-net/_jcr_content.articles.grid?tileselection=auto&tagsPath={",".join(Article.random_tags())}&offset=0&pageSize={Article.count}')
|
||||||
|
@ -78,7 +80,7 @@ async def start_check_news(bot: FetchTarget):
|
||||||
@on_schedule('feedback_news', developers=['Dianliang233'], recommend_modules=['minecraft_news'],
|
@on_schedule('feedback_news', developers=['Dianliang233'], recommend_modules=['minecraft_news'],
|
||||||
trigger=IntervalTrigger(seconds=300), desc='开启后将会推送来自Minecraft Feedback的更新记录。',
|
trigger=IntervalTrigger(seconds=300), desc='开启后将会推送来自Minecraft Feedback的更新记录。',
|
||||||
alias='feedbacknews')
|
alias='feedbacknews')
|
||||||
async def feedback_news(bot: FetchTarget):
|
async def feedback_news(bot: Bot.FetchTarget):
|
||||||
sections = [{'name': 'beta',
|
sections = [{'name': 'beta',
|
||||||
'url': 'https://minecraftfeedback.zendesk.com/api/v2/help_center/en-us/sections/360001185332/articles?per_page=5'},
|
'url': 'https://minecraftfeedback.zendesk.com/api/v2/help_center/en-us/sections/360001185332/articles?per_page=5'},
|
||||||
{'name': 'article',
|
{'name': 'article',
|
||||||
|
|
|
@ -3,9 +3,9 @@ import urllib.parse
|
||||||
|
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.utils import get_url
|
from core.utils.http import get_url
|
||||||
|
|
||||||
mod_dl = on_command(
|
mod_dl = on_command(
|
||||||
bind_prefix='mod_dl',
|
bind_prefix='mod_dl',
|
||||||
|
@ -26,7 +26,7 @@ source_url = 'https://files.xmdhs.com/curseforge/'
|
||||||
|
|
||||||
|
|
||||||
@mod_dl.handle('<mod_name> [<version>] {通过模组名获取模组下载链接,CloudFlare CDN支持。}')
|
@mod_dl.handle('<mod_name> [<version>] {通过模组名获取模组下载链接,CloudFlare CDN支持。}')
|
||||||
async def main(msg: MessageSession):
|
async def main(msg: Bot.MessageSession):
|
||||||
mod_name = msg.parsed_msg['<mod_name>']
|
mod_name = msg.parsed_msg['<mod_name>']
|
||||||
ver = msg.parsed_msg.get('<version>', False)
|
ver = msg.parsed_msg.get('<version>', False)
|
||||||
if ver:
|
if ver:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# ported from kurisu(https://github.com/nh-server/Kurisu/tree/main/cogs/results)
|
# ported from kurisu(https://github.com/nh-server/Kurisu/tree/main/cogs/results)
|
||||||
import discord
|
import discord
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.utils.message import convertDiscordEmbed
|
from core.utils.message import convertDiscordEmbed
|
||||||
from . import switch, wiiu_support, wiiu_results, ctr_support, ctr_results
|
from . import switch, wiiu_support, wiiu_results, ctr_support, ctr_results
|
||||||
|
@ -82,7 +82,7 @@ e = on_command('err', developers=['OasisAkari', 'kurisu'])
|
||||||
|
|
||||||
|
|
||||||
@e.handle('<errcode> {解析任天堂系列主机的报错码并给出原因。}')
|
@e.handle('<errcode> {解析任天堂系列主机的报错码并给出原因。}')
|
||||||
async def result(msg: MessageSession):
|
async def result(msg: Bot.MessageSession):
|
||||||
"""
|
"""
|
||||||
Displays information on game console result codes, with a fancy embed.
|
Displays information on game console result codes, with a fancy embed.
|
||||||
0x prefix is not required for hex input.
|
0x prefix is not required for hex input.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from core.elements import Url
|
from core.builtins import Url
|
||||||
|
|
||||||
|
|
||||||
class Module:
|
class Module:
|
||||||
|
|
|
@ -2,9 +2,9 @@ import os
|
||||||
|
|
||||||
from PIL import Image, ImageDraw, ImageFont
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
|
from core.builtins import Image as Img
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import Image as Img
|
|
||||||
from core.utils.cache import random_cache_path
|
from core.utils.cache import random_cache_path
|
||||||
|
|
||||||
assets_path = os.path.abspath('./assets/arcaea')
|
assets_path = os.path.abspath('./assets/arcaea')
|
||||||
|
@ -14,7 +14,7 @@ p = on_command('ptt',
|
||||||
|
|
||||||
|
|
||||||
@p.handle('<potential> {生成一张Arcaea Potential图片}')
|
@p.handle('<potential> {生成一张Arcaea Potential图片}')
|
||||||
async def pttimg(msg: MessageSession):
|
async def pttimg(msg: Bot.MessageSession):
|
||||||
ptt = msg.parsed_msg['<potential>']
|
ptt = msg.parsed_msg['<potential>']
|
||||||
# ptt
|
# ptt
|
||||||
if ptt == '--':
|
if ptt == '--':
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import secrets
|
import secrets
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
|
|
||||||
r = on_command('random', alias={'rand': 'random', 'rng': 'random', 'dice': 'random number 1 6',
|
r = on_command('random', alias={'rand': 'random', 'rng': 'random', 'dice': 'random number 1 6',
|
||||||
|
@ -10,7 +10,7 @@ r = on_command('random', alias={'rand': 'random', 'rng': 'random', 'dice': 'rand
|
||||||
|
|
||||||
|
|
||||||
@r.handle('number <min> <max> {生成区间内的随机整数}', )
|
@r.handle('number <min> <max> {生成区间内的随机整数}', )
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
_min = msg.parsed_msg['<min>']
|
_min = msg.parsed_msg['<min>']
|
||||||
_max = msg.parsed_msg['<max>']
|
_max = msg.parsed_msg['<max>']
|
||||||
random = secrets.randbelow(int(_max) - int(_min) + 1) + int(_min)
|
random = secrets.randbelow(int(_max) - int(_min) + 1) + int(_min)
|
||||||
|
@ -18,6 +18,6 @@ async def _(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@r.handle('choice ... {从集合中选择元素}', )
|
@r.handle('choice ... {从集合中选择元素}', )
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
choices = msg.parsed_msg['...']
|
choices = msg.parsed_msg['...']
|
||||||
await msg.finish(secrets.choice(choices))
|
await msg.finish(secrets.choice(choices))
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
from core.builtins import Bot
|
||||||
from core.component import on_startup
|
from core.component import on_startup
|
||||||
from core.dirty_check import check
|
from core.dirty_check import check
|
||||||
from core.elements import FetchTarget
|
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.scheduler import Scheduler
|
from core.scheduler import Scheduler
|
||||||
from modules.wiki.utils.UTC8 import UTC8
|
from modules.wiki.utils.UTC8 import UTC8
|
||||||
|
@ -10,7 +10,7 @@ wiki = WikiLib('https://minecraft.fandom.com/zh/api.php')
|
||||||
|
|
||||||
|
|
||||||
@on_startup('__check_newbie__', required_superuser=True, developers=['OasisAkari'])
|
@on_startup('__check_newbie__', required_superuser=True, developers=['OasisAkari'])
|
||||||
async def newbie(bot: FetchTarget):
|
async def newbie(bot: Bot.FetchTarget):
|
||||||
if bot.name not in ['QQ', 'TEST']:
|
if bot.name not in ['QQ', 'TEST']:
|
||||||
return
|
return
|
||||||
Logger.info('Start newbie monitoring...')
|
Logger.info('Start newbie monitoring...')
|
||||||
|
@ -40,7 +40,7 @@ async def newbie(bot: FetchTarget):
|
||||||
|
|
||||||
|
|
||||||
@on_startup('__check_abuse__', required_superuser=True, developers=['OasisAkari'])
|
@on_startup('__check_abuse__', required_superuser=True, developers=['OasisAkari'])
|
||||||
async def _(bot: FetchTarget):
|
async def _(bot: Bot.FetchTarget):
|
||||||
if bot.name not in ['QQ', 'TEST']:
|
if bot.name not in ['QQ', 'TEST']:
|
||||||
return
|
return
|
||||||
Logger.info('Start abuse monitoring...')
|
Logger.info('Start abuse monitoring...')
|
||||||
|
|
|
@ -2,7 +2,7 @@ import asyncio
|
||||||
import re
|
import re
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.dirty_check import check
|
from core.dirty_check import check
|
||||||
from .server import server
|
from .server import server
|
||||||
|
@ -12,7 +12,7 @@ s = on_command('server', alias='s', developers=['_LittleC_', 'OasisAkari'])
|
||||||
|
|
||||||
@s.handle('<ServerIP:Port> [-r] [-p] {获取Minecraft Java/基岩版服务器motd。}',
|
@s.handle('<ServerIP:Port> [-r] [-p] {获取Minecraft Java/基岩版服务器motd。}',
|
||||||
options_desc={'-r': '显示原始信息', '-p': '显示玩家列表'})
|
options_desc={'-r': '显示原始信息', '-p': '显示玩家列表'})
|
||||||
async def main(msg: MessageSession):
|
async def main(msg: Bot.MessageSession):
|
||||||
enabled_addon = msg.options.get('server_revoke')
|
enabled_addon = msg.options.get('server_revoke')
|
||||||
if enabled_addon is None:
|
if enabled_addon is None:
|
||||||
enabled_addon = True
|
enabled_addon = True
|
||||||
|
@ -65,7 +65,7 @@ async def main(msg: MessageSession):
|
||||||
|
|
||||||
|
|
||||||
@s.handle('revoke <enable|disable> {是否启用自动撤回功能(默认为是)。}')
|
@s.handle('revoke <enable|disable> {是否启用自动撤回功能(默认为是)。}')
|
||||||
async def revoke(msg: MessageSession):
|
async def revoke(msg: Bot.MessageSession):
|
||||||
if msg.parsed_msg.get('<enable|disable>') == 'enable':
|
if msg.parsed_msg.get('<enable|disable>') == 'enable':
|
||||||
msg.data.edit_option('server_revoke', True)
|
msg.data.edit_option('server_revoke', True)
|
||||||
await msg.finish('已启用自动撤回功能。')
|
await msg.finish('已启用自动撤回功能。')
|
||||||
|
@ -74,7 +74,7 @@ async def revoke(msg: MessageSession):
|
||||||
await msg.finish('已禁用自动撤回功能。')
|
await msg.finish('已禁用自动撤回功能。')
|
||||||
|
|
||||||
|
|
||||||
async def s(msg: MessageSession, address, raw, showplayer, mode, enabled_addon):
|
async def s(msg: Bot.MessageSession, address, raw, showplayer, mode, enabled_addon):
|
||||||
sendmsg = await server(address, raw, showplayer, mode)
|
sendmsg = await server(address, raw, showplayer, mode)
|
||||||
if sendmsg != '':
|
if sendmsg != '':
|
||||||
sendmsg = await check(sendmsg)
|
sendmsg = await check(sendmsg)
|
||||||
|
|
|
@ -4,7 +4,7 @@ import traceback
|
||||||
import aiohttp
|
import aiohttp
|
||||||
import ujson as json
|
import ujson as json
|
||||||
|
|
||||||
from core.elements import ErrorMessage
|
from core.builtins import ErrorMessage
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from modules.wiki.utils.dbutils import WikiTargetInfo
|
from modules.wiki.utils.dbutils import WikiTargetInfo
|
||||||
from .user import get_user_info
|
from .user import get_user_info
|
||||||
|
@ -10,7 +10,7 @@ usr = on_command('user', alias=['u'],
|
||||||
|
|
||||||
|
|
||||||
@usr.handle('<username> [-p] {获取一个MediaWiki用户的信息。}', options_desc={'-p': '生成一张图片'})
|
@usr.handle('<username> [-p] {获取一个MediaWiki用户的信息。}', options_desc={'-p': '生成一张图片'})
|
||||||
async def user(msg: MessageSession):
|
async def user(msg: Bot.MessageSession):
|
||||||
target = WikiTargetInfo(msg)
|
target = WikiTargetInfo(msg)
|
||||||
get_url = target.get_start_wiki()
|
get_url = target.get_start_wiki()
|
||||||
if get_url:
|
if get_url:
|
||||||
|
|
|
@ -6,8 +6,8 @@ import urllib.parse
|
||||||
|
|
||||||
from bs4 import BeautifulSoup as bs
|
from bs4 import BeautifulSoup as bs
|
||||||
|
|
||||||
from core.elements import Plain, Image
|
from core.builtins import Plain, Image
|
||||||
from core.utils import get_url, download_to_cache
|
from core.utils.http import get_url, download_to_cache
|
||||||
from modules.wiki.utils.UTC8 import UTC8
|
from modules.wiki.utils.UTC8 import UTC8
|
||||||
from modules.wiki.utils.wikilib import WikiLib
|
from modules.wiki.utils.wikilib import WikiLib
|
||||||
from .tpg import tpg
|
from .tpg import tpg
|
||||||
|
|
|
@ -2,10 +2,10 @@ import re
|
||||||
|
|
||||||
import ujson as json
|
import ujson as json
|
||||||
|
|
||||||
from core.builtins.message import MessageSession
|
from core.builtins import Bot
|
||||||
|
from core.builtins import Plain, Image, Url
|
||||||
from core.component import on_command
|
from core.component import on_command
|
||||||
from core.elements import Plain, Image, Url
|
from core.utils.http import get_url
|
||||||
from core.utils import get_url
|
|
||||||
from .teahouse import get_rss as get_teahouse_rss
|
from .teahouse import get_rss as get_teahouse_rss
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,12 +37,12 @@ wky = on_command('weekly', developers=['Dianliang233'])
|
||||||
|
|
||||||
|
|
||||||
@wky.handle('{获取中文 Minecraft Wiki 的每周页面}')
|
@wky.handle('{获取中文 Minecraft Wiki 的每周页面}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
weekly = await get_weekly(True if msg.target.clientName == 'QQ' else False)
|
weekly = await get_weekly(True if msg.target.clientName == 'QQ' else False)
|
||||||
await msg.finish(weekly)
|
await msg.finish(weekly)
|
||||||
|
|
||||||
|
|
||||||
@wky.handle('teahouse {获取茶馆周报}')
|
@wky.handle('teahouse {获取茶馆周报}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: Bot.MessageSession):
|
||||||
weekly = await get_teahouse_rss()
|
weekly = await get_teahouse_rss()
|
||||||
await msg.finish(weekly)
|
await msg.finish(weekly)
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Reference in a new issue