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