remove Option component
This commit is contained in:
parent
f7fcc13f46
commit
bf757d5cd5
7 changed files with 71 additions and 77 deletions
|
@ -6,7 +6,7 @@ from apscheduler.triggers.cron import CronTrigger
|
|||
from apscheduler.triggers.date import DateTrigger
|
||||
from apscheduler.triggers.interval import IntervalTrigger
|
||||
|
||||
from core.elements import Command, RegexCommand, Option, Schedule, StartUp
|
||||
from core.elements import Command, RegexCommand, Schedule, StartUp
|
||||
from core.elements.module.component_meta import *
|
||||
from core.loader import ModulesManager
|
||||
|
||||
|
@ -148,38 +148,6 @@ def on_regex(
|
|||
ModulesManager.add_module(module)
|
||||
return Bind.Regex(bind_prefix)
|
||||
|
||||
|
||||
def on_option(
|
||||
bind_prefix: str,
|
||||
desc: str = None,
|
||||
alias: Union[str, list, tuple, dict] = None,
|
||||
recommend_modules: Union[str, list, tuple] = None,
|
||||
developers: Union[str, list, tuple] = None,
|
||||
required_superuser: bool = False,
|
||||
required_admin: bool = False
|
||||
):
|
||||
"""
|
||||
|
||||
:param bind_prefix: 绑定的命令前缀。
|
||||
:param alias: 此命令的别名。
|
||||
:param desc: 此命令的简介。
|
||||
:param recommend_modules: 推荐打开的其他模块。
|
||||
:param developers: 模块作者。
|
||||
:param required_admin: 此命令是否需要群聊管理员权限。
|
||||
:param required_superuser: 将此命令设为机器人的超级管理员才可执行。
|
||||
:return: 此类型的模块。
|
||||
"""
|
||||
|
||||
module = Option(bind_prefix=bind_prefix,
|
||||
desc=desc,
|
||||
alias=alias,
|
||||
recommend_modules=recommend_modules,
|
||||
developers=developers,
|
||||
required_superuser=required_superuser,
|
||||
required_admin=required_admin)
|
||||
ModulesManager.add_module(module)
|
||||
|
||||
|
||||
def on_schedule(
|
||||
bind_prefix: str,
|
||||
trigger: Union[AndTrigger, OrTrigger, DateTrigger, CronTrigger, IntervalTrigger],
|
||||
|
|
|
@ -74,29 +74,6 @@ class RegexCommand:
|
|||
self.match_list = RegexMatches()
|
||||
|
||||
|
||||
class Option:
|
||||
def __init__(self,
|
||||
bind_prefix: str,
|
||||
desc: str = None,
|
||||
alias: Union[str, list, tuple, dict] = None,
|
||||
recommend_modules: Union[str, list, tuple] = None,
|
||||
developers: Union[str, list, tuple] = None,
|
||||
required_superuser: bool = False,
|
||||
required_admin: bool = False):
|
||||
self.bind_prefix: str = bind_prefix
|
||||
if isinstance(alias, str):
|
||||
alias = {alias: bind_prefix}
|
||||
elif isinstance(alias, (tuple, list)):
|
||||
alias = {x: bind_prefix for x in alias}
|
||||
self.alias: Dict[str, str] = alias
|
||||
self.desc: str = desc
|
||||
self.recommend_modules: List[str] = convert2lst(recommend_modules)
|
||||
self.developers: List[str] = convert2lst(developers)
|
||||
self.required_admin: bool = required_admin
|
||||
self.required_superuser: bool = required_superuser
|
||||
self.match_list = None
|
||||
|
||||
|
||||
class Schedule:
|
||||
def __init__(self,
|
||||
function: Callable,
|
||||
|
@ -151,5 +128,5 @@ class StartUp:
|
|||
self.exclude_from: List[str] = convert2lst(exclude_from)
|
||||
|
||||
|
||||
__all__ = ["Command", "RegexCommand", "Option", "Schedule", "StartUp", "AndTrigger", "OrTrigger", "DateTrigger",
|
||||
__all__ = ["Command", "RegexCommand", "Schedule", "StartUp", "AndTrigger", "OrTrigger", "DateTrigger",
|
||||
"CronTrigger", "IntervalTrigger"]
|
||||
|
|
|
@ -18,7 +18,7 @@ class Logginglogger:
|
|||
def __init__(self):
|
||||
self.log = logger
|
||||
self.log.remove()
|
||||
self.log.add(sys.stderr, format=basic_logger_format, level="INFO", backtrace=False, diagnose=False, colorize=True)
|
||||
self.log.add(sys.stderr, format=basic_logger_format, level="INFO", colorize=True)
|
||||
self.log.add(logpath + '/' + bot_name + "_{time:YYYY-MM-DD}.log", format=basic_logger_format, retention="10 days")
|
||||
self.info = self.log.info
|
||||
self.error = self.log.error
|
||||
|
|
|
@ -272,5 +272,31 @@ class BotDBUtil:
|
|||
session.commit()
|
||||
return True
|
||||
|
||||
class Options:
|
||||
def __init__(self, msg: Union[MessageSession, FetchTarget, str]):
|
||||
self.targetId = msg.target.targetId if isinstance(msg, (MessageSession, FetchTarget)) else msg
|
||||
|
||||
@retry(stop=stop_after_attempt(3))
|
||||
@auto_rollback_error
|
||||
def edit(self, k, v):
|
||||
get_ = session.query(TargetOptions).filter_by(targetId=self.targetId).first()
|
||||
if get_ is None:
|
||||
session.add_all([TargetOptions(targetId=self.targetId, options=json.dumps({k: v}))])
|
||||
else:
|
||||
get_.options = json.dumps({**json.loads(get_.options), k: v})
|
||||
session.commit()
|
||||
|
||||
@retry(stop=stop_after_attempt(3))
|
||||
@auto_rollback_error
|
||||
def get(self, k=None):
|
||||
query = session.query(TargetOptions).filter_by(targetId=self.targetId).first()
|
||||
if query is None:
|
||||
return {}
|
||||
value: dict = json.loads(query.options)
|
||||
if k is None:
|
||||
return value
|
||||
else:
|
||||
return value.get(k)
|
||||
|
||||
|
||||
__all__ = ["BotDBUtil", "auto_rollback_error", "session"]
|
||||
|
|
|
@ -26,6 +26,13 @@ class SenderInfo(Base):
|
|||
disable_typing = Column(Boolean, default=False)
|
||||
|
||||
|
||||
class TargetOptions(Base):
|
||||
"""对象设置的参数"""
|
||||
__tablename__ = "TargetOptions"
|
||||
targetId = Column(String(512), primary_key=True)
|
||||
options = Column(LONGTEXT if Config('db_path').startswith('mysql') else Text)
|
||||
|
||||
|
||||
class StoredData(Base):
|
||||
"""数据存储"""
|
||||
__tablename__ = "StoredData"
|
||||
|
@ -66,5 +73,5 @@ class DBVersion(Base):
|
|||
|
||||
|
||||
Session.create()
|
||||
__all__ = ["EnabledModules", "TargetAdmin", "SenderInfo", "CommandTriggerTime", "GroupAllowList", "StoredData",
|
||||
"DBVersion", "MuteList"]
|
||||
__all__ = ["EnabledModules", "TargetAdmin", "SenderInfo", "TargetOptions", "CommandTriggerTime", "GroupAllowList",
|
||||
"StoredData", "DBVersion", "MuteList"]
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
import asyncio
|
||||
|
||||
from core.component import on_command, on_option
|
||||
from core.component import on_command
|
||||
from core.dirty_check import check
|
||||
from core.builtins.message import MessageSession
|
||||
from database import BotDBUtil
|
||||
from .server import server
|
||||
|
||||
on_option('server_disable_revoke', desc='关闭server命令的自动撤回') # 临时解决方案,后续会改动,归属到toggle命令下
|
||||
|
||||
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):
|
||||
enabled_addon = BotDBUtil.Module(msg).check_target_enabled_module('server_disable_revoke')
|
||||
enabled_addon = BotDBUtil.Options(msg).get('server_revoke')
|
||||
if enabled_addon is None:
|
||||
enabled_addon = True
|
||||
gather_list = []
|
||||
sm = ['j', 'b']
|
||||
for x in sm:
|
||||
|
@ -24,25 +24,35 @@ async def main(msg: MessageSession):
|
|||
g = await asyncio.gather(*gather_list)
|
||||
if g == ['', '']:
|
||||
msg_ = '发生错误:没有找到任何类型的Minecraft服务器。'
|
||||
if msg.Feature.delete and not enabled_addon:
|
||||
if msg.Feature.delete and enabled_addon:
|
||||
msg_ += '[90秒后撤回消息]'
|
||||
send = await msg.sendMessage(msg_)
|
||||
if msg.Feature.delete and not enabled_addon:
|
||||
if msg.Feature.delete and enabled_addon:
|
||||
await msg.sleep(90)
|
||||
await send.delete()
|
||||
await msg.finish()
|
||||
|
||||
|
||||
@s.handle('revoke (enable|disable) {是否启用自动撤回功能(默认为是)。}')
|
||||
async def revoke(msg: MessageSession):
|
||||
if msg.parsed_msg['enable']:
|
||||
BotDBUtil.Options(msg).edit('server_revoke', True)
|
||||
await msg.finish('已启用自动撤回功能。')
|
||||
else:
|
||||
BotDBUtil.Options(msg).edit('server_revoke', False)
|
||||
await msg.finish('已禁用自动撤回功能。')
|
||||
|
||||
|
||||
async def s(msg: MessageSession, address, raw, showplayer, mode, enabled_addon):
|
||||
sendmsg = await server(address, raw, showplayer, mode)
|
||||
if sendmsg != '':
|
||||
sendmsg = await check(sendmsg)
|
||||
for x in sendmsg:
|
||||
m = x['content']
|
||||
if msg.Feature.delete and not enabled_addon:
|
||||
if msg.Feature.delete and enabled_addon:
|
||||
m += '\n[90秒后撤回消息]'
|
||||
send = await msg.sendMessage(m)
|
||||
if msg.Feature.delete and not enabled_addon:
|
||||
if msg.Feature.delete and enabled_addon:
|
||||
await msg.sleep(90)
|
||||
await send.delete()
|
||||
await msg.finish()
|
||||
|
|
|
@ -6,7 +6,7 @@ from typing import Union
|
|||
import filetype
|
||||
import ujson as json
|
||||
|
||||
from core.component import on_command, on_regex, on_option
|
||||
from core.component import on_command, on_regex
|
||||
from core.elements import Plain, Image, Voice, Url
|
||||
from core.builtins.message import MessageSession
|
||||
from core.exceptions import AbuseWarning
|
||||
|
@ -202,6 +202,16 @@ async def _(msg: MessageSession):
|
|||
await msg.finish(f'成功重置请求时所使用的前缀。')
|
||||
|
||||
|
||||
@wiki.handle('fandom (enable|disable) {启用/禁用Fandom全局Interwiki查询}', required_admin=True)
|
||||
async def _(msg: MessageSession):
|
||||
if msg.parsed_msg['enable']:
|
||||
BotDBUtil.Options(msg).edit('wiki_fandom_addon', True)
|
||||
await msg.finish('已启用Fandom全局Interwiki查询。')
|
||||
else:
|
||||
BotDBUtil.Options(msg).edit('wiki_fandom_addon', False)
|
||||
await msg.finish('已禁用Fandom全局Interwiki查询。')
|
||||
|
||||
|
||||
aud = on_command('wiki_audit', alias='wa',
|
||||
developers=['Dianliang233', 'OasisAkari'], required_superuser=True)
|
||||
|
||||
|
@ -316,10 +326,6 @@ async def _(msg: MessageSession):
|
|||
wikis.append(f'{bl[0]}(by {bl[1]})')
|
||||
await msg.finish('\n'.join(wikis))
|
||||
|
||||
|
||||
on_option('wiki_fandom_addon', desc='为Fandom定制的查询附加功能。',
|
||||
developers=['OasisAkari'])
|
||||
|
||||
wiki_inline = on_regex('wiki_inline',
|
||||
desc='开启后将自动解析消息中带有的[[]]或{{}}字符串并自动查询Wiki,如[[海晶石]]',
|
||||
alias='wiki_regex', developers=['OasisAkari'])
|
||||
|
@ -364,8 +370,7 @@ async def search_pages(session: MessageSession, title: Union[str, list, tuple],
|
|||
interwiki_list = target.get_interwikis()
|
||||
headers = target.get_headers()
|
||||
prefix = target.get_prefix()
|
||||
enabled_fandom_addon = BotDBUtil.Module(
|
||||
session).check_target_enabled_module('wiki_fandom_addon')
|
||||
enabled_fandom_addon = BotDBUtil.Options(session).get('wiki_fandom_addon')
|
||||
if start_wiki is None:
|
||||
await session.sendMessage('没有指定起始Wiki,已默认指定为中文Minecraft Wiki,发送~wiki set <域名>来设定自定义起始Wiki。'
|
||||
'\n例子:~wiki set https://minecraft.fandom.com/zh/wiki/')
|
||||
|
@ -453,8 +458,9 @@ async def query_pages(session: Union[MessageSession, QueryInfo], title: Union[st
|
|||
interwiki_list = target.get_interwikis()
|
||||
headers = target.get_headers()
|
||||
prefix = target.get_prefix()
|
||||
enabled_fandom_addon = BotDBUtil.Module(
|
||||
session).check_target_enabled_module('wiki_fandom_addon')
|
||||
enabled_fandom_addon = BotDBUtil.Options(session).get('wiki_fandom_addon')
|
||||
if enabled_fandom_addon is None:
|
||||
enabled_fandom_addon = False
|
||||
elif isinstance(session, QueryInfo):
|
||||
start_wiki = session.api
|
||||
interwiki_list = []
|
||||
|
|
Reference in a new issue