Archived
1
0
Fork 0

remove Option component

This commit is contained in:
yzhh 2022-07-01 22:12:26 +08:00
parent f7fcc13f46
commit bf757d5cd5
7 changed files with 71 additions and 77 deletions

View file

@ -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],

View file

@ -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"]

View file

@ -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

View file

@ -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"]

View file

@ -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"]

View file

@ -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()

View file

@ -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 = []