Update helloworld.py

This commit is contained in:
Soulter 2023-12-23 00:49:18 +08:00 committed by GitHub
parent 54bbd67979
commit 23e232bdad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6,57 +6,42 @@ from nakuru import (
from botpy.message import Message, DirectMessage from botpy.message import Message, DirectMessage
from model.platform.qq import QQ from model.platform.qq import QQ
import time import time
import threading from cores.qqbot.global_object import AstrMessageEvent
'''
注意改插件名噢格式XXXPlugin Main
小提示把此模板仓库 fork 之后 clone 到机器人文件夹下的 addons/plugins/ 目录下然后用 Pycharm/VSC 等工具打开可获更棒的编程体验自动补全等
'''
class HelloWorldPlugin: class HelloWorldPlugin:
""" """
初始化函数, 可以选择直接pass 初始化函数, 可以选择直接pass
""" """
def __init__(self) -> None: def __init__(self) -> None:
self.myThread = None # 线程对象如果要使用线程需要在此处定义。在run处定义会被释放掉 print("hello, world!")
print("这是HelloWorld测试插件, 发送 helloworld 即可触发此插件。")
""" """
入口函数机器人会调用此函数 机器人程序会调用此函数
参数规范: message: 消息文本; role: 身份; platform: 消息平台; message_obj: 消息对象; qq_platform: QQ平台对象可以通过调用qq_platform.send()直接发送消息详见Helloworld插件示例 返回规范: bool: 插件是否响应该消息 (所有的消息均会调用每一个载入的插件, 如果不响应, 则应返回 False)
参数详情: role为admin或者member; platform为qqchan或者gocq; message_obj为nakuru的GroupMessage对象或者FriendMessage对象或者频道的Message, DirectMessage对象 Tuple: Non e或者长度为 3 的元组如果不响应, 返回 None 如果响应, 1 个参数为指令是否调用成功, 2 个参数为返回的消息链列表, 3 个参数为指令名称
返回规范: bool: 是否hit到此插件(所有的消息均会调用每一个载入的插件, 如果没有hit到, 则应返回False) 例子一个名为"yuanshen"的插件当接收到消息为原神 可莉, 如果不想要处理此消息则返回False, None如果想要处理但是执行失败了返回True, tuple([False, "请求失败。", "yuanshen"]) 执行成功了返回True, tuple([True, "结果文本", "yuanshen"])
Tuple: None或者长度为3的元组当没有hit到时, 返回None. hit到时, 第1个参数为指令是否调用成功, 第2个参数为返回的消息文本或者gocq的消息链列表, 第3个参数为指令名称
例子做一个名为"yuanshen"的插件当接收到消息为原神 可莉, 如果不想要处理此消息则返回False, None如果想要处理但是执行失败了返回True, tuple([False, "请求失败啦~", "yuanshen"])
执行成功了返回True, tuple([True, "结果文本", "yuanshen"])
""" """
def run(self, message: str, role: str, platform: str, message_obj, qq_platform: QQ): def run(self, ame: AstrMessageEvent):
if ame.message_str == "helloworld":
if platform == "gocq":
"""
QQ平台指令处理逻辑
"""
img_url = "https://gchat.qpic.cn/gchatpic_new/905617992/720871955-2246763964-C6EE1A52CC668EC982453065C4FA8747/0?term=2&is_origin=0"
if message == "helloworld":
return True, tuple([True, [Plain("Hello World!!"), Image.fromURL(url=img_url)], "helloworld"])
elif message == "hiloop":
if self.myThread is None:
self.myThread = threading.Thread(target=self.helloworldThread, args=(message_obj, qq_platform))
self.myThread.start()
return True, tuple([True, [Plain("A lot of Helloworlds!!"), Image.fromURL(url=img_url)], "helloworld"])
else:
return False, None
elif platform == "qqchan":
"""
频道处理逻辑(频道暂时只支持回复字符串类型的信息返回的信息都会被转成字符串如果不想处理某一个平台的信息直接返回False, None就行)
"""
if message == "helloworld":
return True, tuple([True, "Hello World!!", "helloworld"]) return True, tuple([True, "Hello World!!", "helloworld"])
else: else:
return False, None return False, None
""" """
帮助函数当用户输入 plugin v 插件名称 会调用此函数返回帮助信息 插件元信息
当用户输入 plugin v 插件名称 会调用此函数返回帮助信息
返回参数要求(必填)dict{ 返回参数要求(必填)dict{
"name": str, # 插件名称 "name": str, # 插件名称
"desc": str, # 插件简短描述 "desc": str, # 插件简短描述
"help": str, # 插件帮助信息 "help": str, # 插件帮助信息
"version": str, # 插件版本 "version": str, # 插件版本
"author": str, # 插件作者 "author": str, # 插件作者
"repo": str, # 插件仓库地址 [ 可选 ]
"homepage": str, # 插件主页 [ 可选 ]
} }
""" """
def info(self): def info(self):
@ -64,16 +49,6 @@ class HelloWorldPlugin:
"name": "helloworld", "name": "helloworld",
"desc": "测试插件", "desc": "测试插件",
"help": "测试插件, 回复 helloworld 即可触发", "help": "测试插件, 回复 helloworld 即可触发",
"version": "v1.0.2 beta", "version": "v1.2",
"author": "Soulter" "author": "Soulter"
} }
def helloworldThread(self, meseage_obj, qq_platform: QQ):
while True:
qq_platform.send(meseage_obj, [Plain("Hello World!!")]) # 第一个参数可以是message_obj, 也可以是qq群号
time.sleep(3) # 睡眠3秒。 用while True一定要记得sleep不然会卡死
# 热知识:检测消息开头指令,使用以下方法
# if message.startswith("原神"):
# pass