QQ机器人插件六:随机笑话(语音)
1. 导入需要使用的包
import nonebot
from nonebot import on_keyword # 事件响应器函数
from nonebot.typing import T_State #bot使用的对象和字典
from nonebot.adapters.onebot.v11 import Bot,Message,MessageSegment # #Message是使用cq码的必要函数
import requests
import json # 处理api返回的json数据
2. 事件响应器
想要机器人能识别消息的关键词,然后做出相应的相应,这里就需要注册一个事件响应器。本文使用的时间响应器的辅助函数是on_keyword
。
on_keyword: 创建消息关键词匹配事件响应器。
__plugin_name__ = 'joke'
__plugin_usage__ = '用法: 笑话,返回随机一则笑话。'
joke = on_keyword({"笑话", "joke"})
3. 事件处理流程
如下所示,我们使用joke
响应器的handle
装饰器装饰了一个函数handle_joke。
handle()`是处理事件的主体部分,是事件处理的起点。
@joke.handle()
然后创建一个异步函数:
async def handle_joke(state: T_State):
然后创建一个获取音乐的函数:
async def get_joke():
url = 'https://api.vvhan.com/api/joke?type=json'
res = requests.get(url)
result = json.loads(res.text)
joke = result['joke']
return joke
访问api并获取返回的json值,并转换为可读的格式。
{
"success":true,
"id":433,"title":"你咋不上天呢",
"joke":"有个脾气不好的老婆怎么办?中国现在这个国情,有老婆就不错了!你还想脾气好,你怎么不上天!"
}
4. 事件响应器操作
这里使用send
操作来发送信息,向用户回复一条消息。回复的方式或途径由协议适配器自行实现。
可以是 str
、Message
、MessageSegment
或 MessageTemplate
。
这个操作等同于使用 bot.send(event, message, **kwargs)
但不需要自行传入 event
。
@joke.handle()
async def handle_joke(bot: Bot, event: Event,state: T_State):
text = await get_joke()
msg = f"[CQ:tts,text={text}]" #将文本转换为语音
await joke.send(Message(msg))
5. 完整代码
import nonebot
from nonebot import on_keyword # 事件响应器函数
from nonebot.typing import T_State #bot使用的对象和字典
from nonebot.adapters.onebot.v11 import Bot,Message,MessageSegment,Event # #Message是使用cq码的必要函数
import requests
import json # 处理api返回的json数据
__plugin_name__ = 'joke'
__plugin_usage__ = '用法: 笑话,返回随机一则笑话。'
joke = on_keyword({"笑话", "joke"})
@joke.handle()
async def handle_joke(bot: Bot, event: Event,state: T_State):
text = await get_joke()
msg = f"[CQ:tts,text={text}]"
await joke.send(Message(msg))
# 在这里编写获取具体笑话的函数
async def get_joke():
url = 'https://api.vvhan.com/api/joke?type=json'
res = requests.get(url)
result = json.loads(res.text)
joke = result['joke']
return joke