nonebot2聊天机器人插件9:定时提醒器timing


该插件涉及知识点:定时器,调用bot的api发送消息
插件合集:nonebot2聊天机器人插件

该系列为用于QQ群聊天机器人的nonebot2相关插件,不保证完全符合标准规范写法,如有差错和改进余地,欢迎大佬指点修正。
前端:nonebot2
后端:go-cqhttp
插件所用语言:python3
前置环境安装过程建议参考零基础2分钟教你搭建QQ机器人——基于nonebot2,但是请注意该教程中的后端版本过旧导致私聊发图异常,需要手动更新go-cqhttp版本。

1. 插件用途

插件名:定时器(timing)

用处是在规定的时间点发送指定的信息。
如果在发送前加入对日期的判断,也可以很轻松地改造成生日提示之类的功能。

2. 目录结构

在plugins文件夹中新建一个文件夹timing,文件夹内目录结构如下:

|-quasistar_engine
    |-img
        |-图片存放路径
    |-__init__.py
    |-timing.py
    |-config.py

其中img为用于存储发送的图片的文件夹,timing.py为定时器的位置,config.py用于存储配置项,__init__.py为程序启动位置。

3. 实现难点与解决方案

3.1 定时器

定时器基于nonebot-plugin-apscheduler实现。
官方文档参考:https://v2.nonebot.dev/docs/advanced/scheduler

3.2 调用bot的api发送消息

直接调用bot的api发送群聊或者私聊信息。

获取bot方式,参考NoneBot中apscheduler插件简单案例

from nonebot import get_bots
bot, = get_bots().values()

群聊信息:

# 发送一条群聊信息
await bot.send_msg(
    message_type="group",
    # 群号
    group_id=12345678,
    message='这是一条群聊信息'
)

私聊信息:

# 发送一条私聊信息
await bot.send_msg(
    message_type="private",
    # 私聊用户QQ号
    user_id=12345678,
    message='这是一条私聊信息'
)

4. 代码实现

__init__.py

from .timing import *

config.py

import os

class Config:
    # 记录在哪些群组中使用
    used_in_group = ["12345678"]

    # 插件执行优先级
    priority = 10

timing.py

from nonebot import on_command, require, get_bots
from nonebot.adapters.cqhttp import MessageSegment
import asyncio
import os
from random import randint
from .config import Config

__plugin_name__ = 'timing'
__plugin_usage__ = '用法:在规定时间触发发送的信息。'

img_path = 'file:///' + os.path.split(os.path.realpath(__file__))[0] + '/img/'


# 发送图片时用到的函数, 返回发送图片所用的编码字符串
def send_img(img_name):
    global img_path
    return MessageSegment.image(img_path + img_name)

# 设置一个定时器
timing = require("nonebot_plugin_apscheduler").scheduler


# 设置在15:00发送信息
@timing.scheduled_job("cron", hour='15', minute='00', id="drink_tea")
async def drink_tea():
    bot, = get_bots().values()
    # 发送一条群聊信息
    await bot.send_msg(
        message_type="group",
        # 群号
        group_id=12345678,
        message='这是一条群聊信息' + send_img('三点饮茶.gif')
    )
    # 随机休眠2-5秒
    await asyncio.sleep(randint(2, 5))
    # 发送一条私聊信息
    await bot.send_msg(
        message_type="private",
        # 私聊用户QQ号
        user_id=12345678,
        message='这是一条私聊信息' + send_img('三点饮茶.gif')
    )

5. 插件配图

三点饮茶.gif
在这里插入图片描述

6. 实际效果

在这里插入图片描述

7. 下一个插件

nonebot2聊天机器人插件10:迁移至nonebot2.0.0b5

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值