Nonebot QQ机器人插件六:随机笑话(语音)

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操作来发送信息,向用户回复一条消息。回复的方式或途径由协议适配器自行实现。

可以是 strMessageMessageSegmentMessageTemplate

这个操作等同于使用 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

6. 效果展示

QQ图片20220810120236

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值