mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-02 03:55:55 +00:00
chore: 指令全部改为命令
This commit is contained in:
@@ -180,7 +180,7 @@ Plugin [usage](https://github.com/RockChinQ/QChatGPT/wiki/%E6%8F%92%E4%BB%B6%E4%
|
|||||||
|
|
||||||
在`tests/plugin_examples`目录下,将其整个目录复制到`plugins`目录下即可使用
|
在`tests/plugin_examples`目录下,将其整个目录复制到`plugins`目录下即可使用
|
||||||
|
|
||||||
- `cmdcn` - 主程序指令中文形式
|
- `cmdcn` - 主程序命令中文形式
|
||||||
- `hello_plugin` - 在收到消息`hello`时回复相应消息
|
- `hello_plugin` - 在收到消息`hello`时回复相应消息
|
||||||
- `urlikethisijustsix` - 收到冒犯性消息时回复相应消息
|
- `urlikethisijustsix` - 收到冒犯性消息时回复相应消息
|
||||||
|
|
||||||
@@ -189,7 +189,7 @@ Plugin [usage](https://github.com/RockChinQ/QChatGPT/wiki/%E6%8F%92%E4%BB%B6%E4%
|
|||||||
欢迎提交新的插件
|
欢迎提交新的插件
|
||||||
|
|
||||||
- [revLibs](https://github.com/RockChinQ/revLibs) - 将ChatGPT网页版接入此项目,关于[官方接口和网页版有什么区别](https://github.com/RockChinQ/QChatGPT/wiki/%E5%AE%98%E6%96%B9%E6%8E%A5%E5%8F%A3%E4%B8%8EChatGPT%E7%BD%91%E9%A1%B5%E7%89%88)
|
- [revLibs](https://github.com/RockChinQ/revLibs) - 将ChatGPT网页版接入此项目,关于[官方接口和网页版有什么区别](https://github.com/RockChinQ/QChatGPT/wiki/%E5%AE%98%E6%96%B9%E6%8E%A5%E5%8F%A3%E4%B8%8EChatGPT%E7%BD%91%E9%A1%B5%E7%89%88)
|
||||||
- [Switcher](https://github.com/RockChinQ/Switcher) - 支持通过指令切换使用的模型
|
- [Switcher](https://github.com/RockChinQ/Switcher) - 支持通过命令切换使用的模型
|
||||||
- [hello_plugin](https://github.com/RockChinQ/hello_plugin) - `hello_plugin` 的储存库形式,插件开发模板
|
- [hello_plugin](https://github.com/RockChinQ/hello_plugin) - `hello_plugin` 的储存库形式,插件开发模板
|
||||||
- [dominoar/QChatPlugins](https://github.com/dominoar/QchatPlugins) - dominoar编写的诸多新功能插件(语音输出、Ranimg、屏蔽词规则等)
|
- [dominoar/QChatPlugins](https://github.com/dominoar/QchatPlugins) - dominoar编写的诸多新功能插件(语音输出、Ranimg、屏蔽词规则等)
|
||||||
- [dominoar/QCP-NovelAi](https://github.com/dominoar/QCP-NovelAi) - NovelAI 故事叙述与绘画
|
- [dominoar/QCP-NovelAi](https://github.com/dominoar/QCP-NovelAi) - NovelAI 故事叙述与绘画
|
||||||
|
|||||||
@@ -78,13 +78,13 @@ openai_config = {
|
|||||||
# passive:仅当api-key超额时才会切换api-key
|
# passive:仅当api-key超额时才会切换api-key
|
||||||
switch_strategy = "active"
|
switch_strategy = "active"
|
||||||
|
|
||||||
# [必需] 管理员QQ号,用于接收报错等通知及执行管理员级别指令
|
# [必需] 管理员QQ号,用于接收报错等通知及执行管理员级别命令
|
||||||
# 支持多个管理员,可以使用list形式设置,例如:
|
# 支持多个管理员,可以使用list形式设置,例如:
|
||||||
# admin_qq = [12345678, 87654321]
|
# admin_qq = [12345678, 87654321]
|
||||||
admin_qq = 0
|
admin_qq = 0
|
||||||
|
|
||||||
# 情景预设(机器人人格)
|
# 情景预设(机器人人格)
|
||||||
# 每个会话的预设信息,影响所有会话,无视指令重置
|
# 每个会话的预设信息,影响所有会话,无视命令重置
|
||||||
# 可以通过这个字段指定某些情况的回复,可直接用自然语言描述指令
|
# 可以通过这个字段指定某些情况的回复,可直接用自然语言描述指令
|
||||||
# 例如:
|
# 例如:
|
||||||
# default_prompt = "如果我之后想获取帮助,请你说“输入!help获取帮助”"
|
# default_prompt = "如果我之后想获取帮助,请你说“输入!help获取帮助”"
|
||||||
@@ -98,14 +98,14 @@ admin_qq = 0
|
|||||||
# "en-dict": "我想让你充当英英词典,对于给出的英文单词,你要给出其中文意思以及英文解释,并且给出一个例句,此外不要有其他反馈。",
|
# "en-dict": "我想让你充当英英词典,对于给出的英文单词,你要给出其中文意思以及英文解释,并且给出一个例句,此外不要有其他反馈。",
|
||||||
# }
|
# }
|
||||||
#
|
#
|
||||||
# 在使用期间即可通过指令:
|
# 在使用期间即可通过命令:
|
||||||
# !reset [名称]
|
# !reset [名称]
|
||||||
# 来使用指定的情景预设重置会话
|
# 来使用指定的情景预设重置会话
|
||||||
# 例如:
|
# 例如:
|
||||||
# !reset linux-terminal
|
# !reset linux-terminal
|
||||||
# 若不指定名称,则使用默认情景预设
|
# 若不指定名称,则使用默认情景预设
|
||||||
#
|
#
|
||||||
# 也可以使用指令:
|
# 也可以使用命令:
|
||||||
# !default <名称>
|
# !default <名称>
|
||||||
# 将指定的情景预设设置为默认情景预设
|
# 将指定的情景预设设置为默认情景预设
|
||||||
# 例如:
|
# 例如:
|
||||||
@@ -165,7 +165,7 @@ response_rules = {
|
|||||||
# 符合此规则的消息将不会被响应
|
# 符合此规则的消息将不会被响应
|
||||||
# 支持消息前缀匹配及正则表达式匹配
|
# 支持消息前缀匹配及正则表达式匹配
|
||||||
# 此设置优先级高于response_rules
|
# 此设置优先级高于response_rules
|
||||||
# 用以过滤mirai等其他层级的指令
|
# 用以过滤mirai等其他层级的命令
|
||||||
# @see https://github.com/RockChinQ/QChatGPT/issues/165
|
# @see https://github.com/RockChinQ/QChatGPT/issues/165
|
||||||
ignore_rules = {
|
ignore_rules = {
|
||||||
"prefix": ["/"],
|
"prefix": ["/"],
|
||||||
|
|||||||
4
main.py
4
main.py
@@ -188,10 +188,10 @@ async def start_process(first_time_init=False):
|
|||||||
|
|
||||||
# 检查是否设置了管理员
|
# 检查是否设置了管理员
|
||||||
if cfg['admin_qq'] == 0:
|
if cfg['admin_qq'] == 0:
|
||||||
# logging.warning("未设置管理员QQ,管理员权限指令及运行告警将无法使用,如需设置请修改config.py中的admin_qq字段")
|
# logging.warning("未设置管理员QQ,管理员权限命令及运行告警将无法使用,如需设置请修改config.py中的admin_qq字段")
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
cfg['admin_qq'] = int(input("未设置管理员QQ,管理员权限指令及运行告警将无法使用,请输入管理员QQ号: "))
|
cfg['admin_qq'] = int(input("未设置管理员QQ,管理员权限命令及运行告警将无法使用,请输入管理员QQ号: "))
|
||||||
# 写入到文件
|
# 写入到文件
|
||||||
|
|
||||||
# 读取文件
|
# 读取文件
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from ..utils import context
|
|||||||
# __current__ = "default"
|
# __current__ = "default"
|
||||||
# """当前默认使用的情景预设的名称
|
# """当前默认使用的情景预设的名称
|
||||||
|
|
||||||
# 由管理员使用`!default <名称>`指令切换
|
# 由管理员使用`!default <名称>`命令切换
|
||||||
# """
|
# """
|
||||||
|
|
||||||
# __prompts_from_files__ = {}
|
# __prompts_from_files__ = {}
|
||||||
|
|||||||
@@ -35,18 +35,18 @@ PersonNormalMessageReceived = "person_normal_message_received"
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
PersonCommandSent = "person_command_sent"
|
PersonCommandSent = "person_command_sent"
|
||||||
"""判断为应该处理的私聊指令时触发
|
"""判断为应该处理的私聊命令时触发
|
||||||
kwargs:
|
kwargs:
|
||||||
launcher_type: str 发起对象类型(group/person)
|
launcher_type: str 发起对象类型(group/person)
|
||||||
launcher_id: int 发起对象ID(群号/QQ号)
|
launcher_id: int 发起对象ID(群号/QQ号)
|
||||||
sender_id: int 发送者ID(QQ号)
|
sender_id: int 发送者ID(QQ号)
|
||||||
command: str 指令
|
command: str 命令
|
||||||
params: list[str] 参数列表
|
params: list[str] 参数列表
|
||||||
text_message: str 完整指令文本
|
text_message: str 完整命令文本
|
||||||
is_admin: bool 是否为管理员
|
is_admin: bool 是否为管理员
|
||||||
|
|
||||||
returns (optional):
|
returns (optional):
|
||||||
alter: str 修改后的完整指令文本
|
alter: str 修改后的完整命令文本
|
||||||
reply: list 回复消息组件列表
|
reply: list 回复消息组件列表
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -64,18 +64,18 @@ GroupNormalMessageReceived = "group_normal_message_received"
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
GroupCommandSent = "group_command_sent"
|
GroupCommandSent = "group_command_sent"
|
||||||
"""判断为应该处理的群聊指令时触发
|
"""判断为应该处理的群聊命令时触发
|
||||||
kwargs:
|
kwargs:
|
||||||
launcher_type: str 发起对象类型(group/person)
|
launcher_type: str 发起对象类型(group/person)
|
||||||
launcher_id: int 发起对象ID(群号/QQ号)
|
launcher_id: int 发起对象ID(群号/QQ号)
|
||||||
sender_id: int 发送者ID(QQ号)
|
sender_id: int 发送者ID(QQ号)
|
||||||
command: str 指令
|
command: str 命令
|
||||||
params: list[str] 参数列表
|
params: list[str] 参数列表
|
||||||
text_message: str 完整指令文本
|
text_message: str 完整命令文本
|
||||||
is_admin: bool 是否为管理员
|
is_admin: bool 是否为管理员
|
||||||
|
|
||||||
returns (optional):
|
returns (optional):
|
||||||
alter: str 修改后的完整指令文本
|
alter: str 修改后的完整命令文本
|
||||||
reply: list 回复消息组件列表
|
reply: list 回复消息组件列表
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ __tree_index__: dict[str, list] = {}
|
|||||||
|
|
||||||
结构:
|
结构:
|
||||||
{
|
{
|
||||||
'pkg.qqbot.cmds.cmd1.CommandCmd1': 'cmd1', # 顶级指令
|
'pkg.qqbot.cmds.cmd1.CommandCmd1': 'cmd1', # 顶级命令
|
||||||
'pkg.qqbot.cmds.cmd1.CommandCmd1_1': 'cmd1.cmd1-1', # 类名: 节点路径
|
'pkg.qqbot.cmds.cmd1.CommandCmd1_1': 'cmd1.cmd1-1', # 类名: 节点路径
|
||||||
'pkg.qqbot.cmds.cmd2.CommandCmd2': 'cmd2',
|
'pkg.qqbot.cmds.cmd2.CommandCmd2': 'cmd2',
|
||||||
'pkg.qqbot.cmds.cmd2.CommandCmd2_1': 'cmd2.cmd2-1',
|
'pkg.qqbot.cmds.cmd2.CommandCmd2_1': 'cmd2.cmd2-1',
|
||||||
@@ -83,79 +83,79 @@ __tree_index__: dict[str, list] = {}
|
|||||||
class Context:
|
class Context:
|
||||||
"""命令执行上下文"""
|
"""命令执行上下文"""
|
||||||
command: str
|
command: str
|
||||||
"""顶级指令文本"""
|
"""顶级命令文本"""
|
||||||
|
|
||||||
crt_command: str
|
crt_command: str
|
||||||
"""当前子指令文本"""
|
"""当前子命令文本"""
|
||||||
|
|
||||||
params: list
|
params: list
|
||||||
"""完整参数列表"""
|
"""完整参数列表"""
|
||||||
|
|
||||||
crt_params: list
|
crt_params: list
|
||||||
"""当前子指令参数列表"""
|
"""当前子命令参数列表"""
|
||||||
|
|
||||||
session_name: str
|
session_name: str
|
||||||
"""会话名"""
|
"""会话名"""
|
||||||
|
|
||||||
text_message: str
|
text_message: str
|
||||||
"""指令完整文本"""
|
"""命令完整文本"""
|
||||||
|
|
||||||
launcher_type: str
|
launcher_type: str
|
||||||
"""指令发起者类型"""
|
"""命令发起者类型"""
|
||||||
|
|
||||||
launcher_id: int
|
launcher_id: int
|
||||||
"""指令发起者ID"""
|
"""命令发起者ID"""
|
||||||
|
|
||||||
sender_id: int
|
sender_id: int
|
||||||
"""指令发送者ID"""
|
"""命令发送者ID"""
|
||||||
|
|
||||||
is_admin: bool
|
is_admin: bool
|
||||||
"""[过时]指令发送者是否为管理员"""
|
"""[过时]命令发送者是否为管理员"""
|
||||||
|
|
||||||
privilege: int
|
privilege: int
|
||||||
"""指令发送者权限等级"""
|
"""命令发送者权限等级"""
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
self.__dict__.update(kwargs)
|
self.__dict__.update(kwargs)
|
||||||
|
|
||||||
|
|
||||||
class AbstractCommandNode:
|
class AbstractCommandNode:
|
||||||
"""指令抽象类"""
|
"""命令抽象类"""
|
||||||
|
|
||||||
parent: type
|
parent: type
|
||||||
"""父指令类"""
|
"""父命令类"""
|
||||||
|
|
||||||
name: str
|
name: str
|
||||||
"""指令名"""
|
"""命令名"""
|
||||||
|
|
||||||
description: str
|
description: str
|
||||||
"""指令描述"""
|
"""命令描述"""
|
||||||
|
|
||||||
usage: str
|
usage: str
|
||||||
"""指令用法"""
|
"""命令用法"""
|
||||||
|
|
||||||
aliases: list[str]
|
aliases: list[str]
|
||||||
"""指令别名"""
|
"""命令别名"""
|
||||||
|
|
||||||
privilege: int
|
privilege: int
|
||||||
"""指令权限等级, 权限大于等于此值的用户才能执行指令"""
|
"""命令权限等级, 权限大于等于此值的用户才能执行命令"""
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def process(cls, ctx: Context) -> tuple[bool, list]:
|
def process(cls, ctx: Context) -> tuple[bool, list]:
|
||||||
"""指令处理函数
|
"""命令处理函数
|
||||||
|
|
||||||
:param ctx: 指令执行上下文
|
:param ctx: 命令执行上下文
|
||||||
|
|
||||||
:return: (是否执行, 回复列表(若执行))
|
:return: (是否执行, 回复列表(若执行))
|
||||||
|
|
||||||
若未执行,将自动以下一个参数查找并执行子指令
|
若未执行,将自动以下一个参数查找并执行子命令
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def help(cls) -> str:
|
def help(cls) -> str:
|
||||||
"""获取指令帮助信息"""
|
"""获取命令帮助信息"""
|
||||||
return '指令: {}\n描述: {}\n用法: \n{}\n别名: {}\n权限: {}'.format(
|
return '命令: {}\n描述: {}\n用法: \n{}\n别名: {}\n权限: {}'.format(
|
||||||
cls.name,
|
cls.name,
|
||||||
cls.description,
|
cls.description,
|
||||||
cls.usage,
|
cls.usage,
|
||||||
@@ -172,11 +172,11 @@ class AbstractCommandNode:
|
|||||||
aliases: list[str] = None,
|
aliases: list[str] = None,
|
||||||
privilege: int = 0
|
privilege: int = 0
|
||||||
):
|
):
|
||||||
"""注册指令
|
"""注册命令
|
||||||
|
|
||||||
:param cls: 指令类
|
:param cls: 命令类
|
||||||
:param name: 指令名
|
:param name: 命令名
|
||||||
:param parent: 父指令类
|
:param parent: 父命令类
|
||||||
"""
|
"""
|
||||||
global __command_list__, __tree_index__
|
global __command_list__, __tree_index__
|
||||||
|
|
||||||
@@ -191,7 +191,7 @@ class AbstractCommandNode:
|
|||||||
logging.debug("cls: {}, name: {}, parent: {}".format(cls, name, parent))
|
logging.debug("cls: {}, name: {}, parent: {}".format(cls, name, parent))
|
||||||
|
|
||||||
if parent is None:
|
if parent is None:
|
||||||
# 顶级指令注册
|
# 顶级命令注册
|
||||||
__command_list__[name] = {
|
__command_list__[name] = {
|
||||||
'description': cls.description,
|
'description': cls.description,
|
||||||
'usage': cls.usage,
|
'usage': cls.usage,
|
||||||
@@ -208,9 +208,9 @@ class AbstractCommandNode:
|
|||||||
path = __tree_index__[parent.__module__ + '.' + parent.__name__]
|
path = __tree_index__[parent.__module__ + '.' + parent.__name__]
|
||||||
|
|
||||||
parent_node = __command_list__[path]
|
parent_node = __command_list__[path]
|
||||||
# 链接父子指令
|
# 链接父子命令
|
||||||
__command_list__[path]['sub'].append(name)
|
__command_list__[path]['sub'].append(name)
|
||||||
# 注册子指令
|
# 注册子命令
|
||||||
__command_list__[path + '.' + name] = {
|
__command_list__[path + '.' + name] = {
|
||||||
'description': cls.description,
|
'description': cls.description,
|
||||||
'usage': cls.usage,
|
'usage': cls.usage,
|
||||||
@@ -229,18 +229,18 @@ class AbstractCommandNode:
|
|||||||
|
|
||||||
|
|
||||||
class CommandPrivilegeError(Exception):
|
class CommandPrivilegeError(Exception):
|
||||||
"""指令权限不足或不存在异常"""
|
"""命令权限不足或不存在异常"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
# 传入Context对象,广搜命令树,返回执行结果
|
# 传入Context对象,广搜命令树,返回执行结果
|
||||||
# 若命令被处理,返回reply列表
|
# 若命令被处理,返回reply列表
|
||||||
# 若命令未被处理,继续执行下一级指令
|
# 若命令未被处理,继续执行下一级命令
|
||||||
# 若命令不存在,报异常
|
# 若命令不存在,报异常
|
||||||
def execute(context: Context) -> list:
|
def execute(context: Context) -> list:
|
||||||
"""执行指令
|
"""执行命令
|
||||||
|
|
||||||
:param ctx: 指令执行上下文
|
:param ctx: 命令执行上下文
|
||||||
|
|
||||||
:return: 回复列表
|
:return: 回复列表
|
||||||
"""
|
"""
|
||||||
@@ -249,7 +249,7 @@ def execute(context: Context) -> list:
|
|||||||
# 拷贝ctx
|
# 拷贝ctx
|
||||||
ctx: Context = copy.deepcopy(context)
|
ctx: Context = copy.deepcopy(context)
|
||||||
|
|
||||||
# 从树取出顶级指令
|
# 从树取出顶级命令
|
||||||
node = __command_list__
|
node = __command_list__
|
||||||
|
|
||||||
path = ctx.command
|
path = ctx.command
|
||||||
@@ -257,7 +257,7 @@ def execute(context: Context) -> list:
|
|||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
node = __command_list__[path]
|
node = __command_list__[path]
|
||||||
logging.debug('执行指令: {}'.format(path))
|
logging.debug('执行命令: {}'.format(path))
|
||||||
|
|
||||||
# 检查权限
|
# 检查权限
|
||||||
if ctx.privilege < node['privilege']:
|
if ctx.privilege < node['privilege']:
|
||||||
@@ -278,7 +278,7 @@ def execute(context: Context) -> list:
|
|||||||
|
|
||||||
|
|
||||||
def register_all():
|
def register_all():
|
||||||
"""启动时调用此函数注册所有指令
|
"""启动时调用此函数注册所有命令
|
||||||
|
|
||||||
递归处理pkg.qqbot.cmds包下及其子包下所有模块的所有继承于AbstractCommand的类
|
递归处理pkg.qqbot.cmds包下及其子包下所有模块的所有继承于AbstractCommand的类
|
||||||
"""
|
"""
|
||||||
@@ -304,7 +304,7 @@ def register_all():
|
|||||||
else:
|
else:
|
||||||
m = __import__(module.__name__ + '.' + item.name, fromlist=[''])
|
m = __import__(module.__name__ + '.' + item.name, fromlist=[''])
|
||||||
# for name, cls in inspect.getmembers(m, inspect.isclass):
|
# for name, cls in inspect.getmembers(m, inspect.isclass):
|
||||||
# # 检查是否为指令类
|
# # 检查是否为命令类
|
||||||
# if cls.__module__ == m.__name__ and issubclass(cls, AbstractCommandNode) and cls != AbstractCommandNode:
|
# if cls.__module__ == m.__name__ and issubclass(cls, AbstractCommandNode) and cls != AbstractCommandNode:
|
||||||
# cls.register(cls, cls.name, cls.parent)
|
# cls.register(cls, cls.name, cls.parent)
|
||||||
|
|
||||||
@@ -313,7 +313,7 @@ def register_all():
|
|||||||
|
|
||||||
|
|
||||||
def apply_privileges():
|
def apply_privileges():
|
||||||
"""读取cmdpriv.json并应用指令权限"""
|
"""读取cmdpriv.json并应用命令权限"""
|
||||||
# 读取内容
|
# 读取内容
|
||||||
json_str = ""
|
json_str = ""
|
||||||
with open('cmdpriv.json', 'r', encoding="utf-8") as f:
|
with open('cmdpriv.json', 'r', encoding="utf-8") as f:
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ class PluginGetCommand(aamgr.AbstractCommandNode):
|
|||||||
def closure():
|
def closure():
|
||||||
try:
|
try:
|
||||||
plugin_host.install_plugin(ctx.crt_params[0])
|
plugin_host.install_plugin(ctx.crt_params[0])
|
||||||
pkg.utils.context.get_qqbot_manager().notify_admin("插件安装成功,请发送 !reload 指令重载插件")
|
pkg.utils.context.get_qqbot_manager().notify_admin("插件安装成功,请发送 !reload 命令重载插件")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error("插件安装失败:{}".format(e))
|
logging.error("插件安装失败:{}".format(e))
|
||||||
pkg.utils.context.get_qqbot_manager().notify_admin("插件安装失败:{}".format(e))
|
pkg.utils.context.get_qqbot_manager().notify_admin("插件安装失败:{}".format(e))
|
||||||
@@ -149,7 +149,7 @@ class PluginDelCommand(aamgr.AbstractCommandNode):
|
|||||||
unin_path = plugin_host.uninstall_plugin(plugin_name)
|
unin_path = plugin_host.uninstall_plugin(plugin_name)
|
||||||
reply = ["[bot]已删除插件: {} ({}), 请发送 !reload 重载插件".format(plugin_name, unin_path)]
|
reply = ["[bot]已删除插件: {} ({}), 请发送 !reload 重载插件".format(plugin_name, unin_path)]
|
||||||
else:
|
else:
|
||||||
reply = ["[bot]err:未找到插件: {}, 请使用!plugin指令查看插件列表".format(plugin_name)]
|
reply = ["[bot]err:未找到插件: {}, 请使用!plugin命令查看插件列表".format(plugin_name)]
|
||||||
|
|
||||||
return True, reply
|
return True, reply
|
||||||
|
|
||||||
@@ -195,7 +195,7 @@ class PluginOnOffCommand(aamgr.AbstractCommandNode):
|
|||||||
plugin_switch.dump_switch()
|
plugin_switch.dump_switch()
|
||||||
reply = ["[bot]已{}插件: {}".format("启用" if new_status else "禁用", plugin_name)]
|
reply = ["[bot]已{}插件: {}".format("启用" if new_status else "禁用", plugin_name)]
|
||||||
else:
|
else:
|
||||||
reply = ["[bot]err:未找到插件: {}, 请使用!plugin指令查看插件列表".format(plugin_name)]
|
reply = ["[bot]err:未找到插件: {}, 请使用!plugin命令查看插件列表".format(plugin_name)]
|
||||||
|
|
||||||
return True, reply
|
return True, reply
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ from .. import aamgr
|
|||||||
@aamgr.AbstractCommandNode.register(
|
@aamgr.AbstractCommandNode.register(
|
||||||
parent=None,
|
parent=None,
|
||||||
name="cmd",
|
name="cmd",
|
||||||
description="显示指令列表",
|
description="显示命令列表",
|
||||||
usage="!cmd\n!cmd <指令名称>",
|
usage="!cmd\n!cmd <命令名称>",
|
||||||
aliases=[],
|
aliases=[],
|
||||||
privilege=1
|
privilege=1
|
||||||
)
|
)
|
||||||
@@ -17,15 +17,15 @@ class CmdCommand(aamgr.AbstractCommandNode):
|
|||||||
reply = []
|
reply = []
|
||||||
|
|
||||||
if len(ctx.params) == 0:
|
if len(ctx.params) == 0:
|
||||||
reply_str = "[bot]当前所有指令:\n\n"
|
reply_str = "[bot]当前所有命令:\n\n"
|
||||||
|
|
||||||
# 遍历顶级指令
|
# 遍历顶级命令
|
||||||
for key in command_list:
|
for key in command_list:
|
||||||
command = command_list[key]
|
command = command_list[key]
|
||||||
if command['parent'] is None:
|
if command['parent'] is None:
|
||||||
reply_str += "!{} - {}\n".format(key, command['description'])
|
reply_str += "!{} - {}\n".format(key, command['description'])
|
||||||
|
|
||||||
reply_str += "\n请使用 !cmd <指令名称> 来查看指令的详细信息"
|
reply_str += "\n请使用 !cmd <命令名称> 来查看命令的详细信息"
|
||||||
|
|
||||||
reply = [reply_str]
|
reply = [reply_str]
|
||||||
else:
|
else:
|
||||||
@@ -33,7 +33,7 @@ class CmdCommand(aamgr.AbstractCommandNode):
|
|||||||
if command_name in command_list:
|
if command_name in command_list:
|
||||||
reply = [command_list[command_name]['cls'].help()]
|
reply = [command_list[command_name]['cls'].help()]
|
||||||
else:
|
else:
|
||||||
reply = ["[bot]指令 {} 不存在".format(command_name)]
|
reply = ["[bot]命令 {} 不存在".format(command_name)]
|
||||||
|
|
||||||
return True, reply
|
return True, reply
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ class HelpCommand(aamgr.AbstractCommandNode):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def process(cls, ctx: aamgr.Context) -> tuple[bool, list]:
|
def process(cls, ctx: aamgr.Context) -> tuple[bool, list]:
|
||||||
import tips
|
import tips
|
||||||
reply = ["[bot] "+tips.help_message + "\n请输入 !cmd 查看指令列表"]
|
reply = ["[bot] "+tips.help_message + "\n请输入 !cmd 查看命令列表"]
|
||||||
|
|
||||||
# 警告config.help_message过时
|
# 警告config.help_message过时
|
||||||
import config
|
import config
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# 指令处理模块
|
# 命令处理模块
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from ..qqbot.cmds import aamgr as cmdmgr
|
from ..qqbot.cmds import aamgr as cmdmgr
|
||||||
@@ -9,7 +9,7 @@ def process_command(session_name: str, text_message: str, mgr, config: dict,
|
|||||||
reply = []
|
reply = []
|
||||||
try:
|
try:
|
||||||
logging.info(
|
logging.info(
|
||||||
"[{}]发起指令:{}".format(session_name, text_message[:min(20, len(text_message))] + (
|
"[{}]发起命令:{}".format(session_name, text_message[:min(20, len(text_message))] + (
|
||||||
"..." if len(text_message) > 20 else "")))
|
"..." if len(text_message) > 20 else "")))
|
||||||
|
|
||||||
cmd = text_message[1:].strip().split(' ')[0]
|
cmd = text_message[1:].strip().split(' ')[0]
|
||||||
@@ -42,7 +42,7 @@ def process_command(session_name: str, text_message: str, mgr, config: dict,
|
|||||||
|
|
||||||
return reply
|
return reply
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
mgr.notify_admin("{}指令执行失败:{}".format(session_name, e))
|
mgr.notify_admin("{}命令执行失败:{}".format(session_name, e))
|
||||||
logging.exception(e)
|
logging.exception(e)
|
||||||
reply = ["[bot]err:{}".format(e)]
|
reply = ["[bot]err:{}".format(e)]
|
||||||
|
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ def process_message(launcher_type: str, launcher_id: int, text_message: str, mes
|
|||||||
processing.append(session_name)
|
processing.append(session_name)
|
||||||
try:
|
try:
|
||||||
msg_type = ''
|
msg_type = ''
|
||||||
if text_message.startswith('!') or text_message.startswith("!"): # 指令
|
if text_message.startswith('!') or text_message.startswith("!"): # 命令
|
||||||
msg_type = 'command'
|
msg_type = 'command'
|
||||||
# 触发插件事件
|
# 触发插件事件
|
||||||
args = {
|
args = {
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ def reload_all(notify=True):
|
|||||||
import main
|
import main
|
||||||
main.stop()
|
main.stop()
|
||||||
|
|
||||||
# 删除所有已注册的指令
|
# 删除所有已注册的命令
|
||||||
import pkg.qqbot.cmds.aamgr as cmdsmgr
|
import pkg.qqbot.cmds.aamgr as cmdsmgr
|
||||||
cmdsmgr.__command_list__ = {}
|
cmdsmgr.__command_list__ = {}
|
||||||
cmdsmgr.__tree_index__ = {}
|
cmdsmgr.__tree_index__ = {}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ rate_limit_drop_tip = "本分钟对话次数超过限速次数,此对话被丢
|
|||||||
# 若设置为空字符串,则不发送提示信息
|
# 若设置为空字符串,则不发送提示信息
|
||||||
message_drop_tip = "[bot]当前有一条消息正在处理,请等待处理完成"
|
message_drop_tip = "[bot]当前有一条消息正在处理,请等待处理完成"
|
||||||
|
|
||||||
# 指令!help帮助消息
|
# 命令 !help帮助消息
|
||||||
help_message = """此机器人通过调用大型语言模型生成回复,不具有情感。
|
help_message = """此机器人通过调用大型语言模型生成回复,不具有情感。
|
||||||
你可以用自然语言与其交流,回复的消息中[GPT]开头的为模型生成的语言,[bot]开头的为程序提示。
|
你可以用自然语言与其交流,回复的消息中[GPT]开头的为模型生成的语言,[bot]开头的为程序提示。
|
||||||
欢迎到github.com/RockChinQ/QChatGPT 给个star"""
|
欢迎到github.com/RockChinQ/QChatGPT 给个star"""
|
||||||
@@ -24,10 +24,10 @@ reply_message = "[bot]err:请求超时"
|
|||||||
# 群聊消息超时提示
|
# 群聊消息超时提示
|
||||||
replys_message = "[bot]err:请求超时"
|
replys_message = "[bot]err:请求超时"
|
||||||
|
|
||||||
# 指令权限不足提示
|
# 命令权限不足提示
|
||||||
command_admin_message = "[bot]err:权限不足: "
|
command_admin_message = "[bot]err:权限不足: "
|
||||||
# 指令无效提示
|
# 命令无效提示
|
||||||
command_err_message = "[bot]err:指令不存在:"
|
command_err_message = "[bot]err:命令不存在:"
|
||||||
|
|
||||||
# 会话重置提示
|
# 会话重置提示
|
||||||
command_reset_message = "[bot]会话已重置"
|
command_reset_message = "[bot]会话已重置"
|
||||||
|
|||||||
Reference in New Issue
Block a user