前言

目前机器人框架有很多,框架内也有很多插件实现各种各样的功能.但是当我们想要的功能没有理想的插件可以实现时,也就需要自己编写一个插件.很多框架只支持易语言编写的插件,但是我个人认为易语言的编程体验十分不好,于是最终采用可以用python编写插件的nonebot框架+go-cqhttp方案

目标功能

为了管理一个千人QQ群,需要一个可靠且便利的方式来记录群员的违规行为,经过讨论,管理员们决定采用类似机动车驾驶证的记分制度.本文章即为实现记分并踢出记分达到指定分数的群员.

nonebot2

nonebot的官方文档已经给出安装方法,在这里只大概记录一下.官方文档

首先安装需要的库[需要Python3.7以上]

pip install nb-cli==0.5.3

最新版本为0.6.4,但是这个版本安装nonebot时会有一些本人不会解决的麻烦,所以尝试了旧版本,可以正常运行

在机器人目录内安装

nb

选择Create a New Project--输入项目名--选择第一项新建文件夹--载入 nonebot 内置插件--选择 cqhttp插件

此时就会生成机器人需要的文件,启动机器人只需要启动bot.py程序

python3 bot.py

Go-cqhttp

这就是一个QQ客户端,首先在github下载合适的文件go-cqhttp下载

下载后启动:

./go-cqhttp

会生成其配置文件,需要修改的是config.yml文件:

xxxxxxxxxxxxxxxxxuin:      # 机器人QQ账号[密码不写,登陆时扫码登陆]
xxxxxxxxxxxxxxxxxuniversal: ws://127.0.0.1:8080/cqhttp/ws
xxxxxxxxxxxxxxxxx

再次启动go-cqhttp

加载插件

在机器人目录的plugins目录内,新建lab.py作为插件,并修改bot.py以加载插件

nonebot.init()# load your plugin herenonebot.run()

将# load your plugin here替换为

nonebot.load_plugins("triority/plugins/lab.py")

自行替换插件目录

编写插件

插件的编辑方法在官方文档中已经有所说明,在下面直接给出文章写到这时已经写完的代码

这是我写的第一个插件,用于在QQ群记分

from nonebot.adapters.cqhttp import Bot, Event
from nonebot.plugin import on_message
import numpy as np
import datetime
#白名单ops
ops=['']
#记分
scores=np.load('scores.npy',allow_pickle=True).item()#回复部分
reply = on_message(priority=100)
@reply.handle()
async def reply_handle(bot: Bot, event: Event):try:#获取聊天内容user_msguser_msg = str(event.get_message()).strip()#获取发消息的人user,群号qunmsg = str(event.get_session_id())user = msg.split("_")[2]qun = msg.split("_")[1]now = datetime.datetime.now()#消息空格分割列表wordswords = user_msg.split(' ')if qun=='':if user_msg[0:2]=='查分':if words[1] in scores:await reply.finish(words[1]+' 的记分为 '+str(scores[words[1]][0]))else:await reply.finish(words[1]+' 无记分记录')if user in ops :if user_msg[0:2]=='记分':if int(words[1])>0:if words[2] in scores:scores[words[2]][0]=scores[words[2]][0]+int(words[1])scores[words[2]].append([now.strftime("%Y-%m-%d %H:%M:%S"),words[1],words[3]])else:scores[words[2]]=[int(words[1]),[now.strftime("%Y-%m-%d %H:%M:%S"),words[1],words[3]]]np.save('scores.npy', scores)await reply.finish(words[2]+' 当前记分为 '+str(scores[words[2]][0]))else:await reply.finish('加分数不能为非正数!')if user_msg[0:2]=='清零':if words[1] in scores:del scores[words[1]]np.save('scores.npy', scores)await reply.finish(words[1]+' 记分已清空')else:await reply.finish(words[1]+' 无记分记录')if user_msg[0:2]=='明细':if words[1] in scores:reason='总记分'+str(scores[words[1]][0])+':\n'for i in range(1,len(scores[words[1]])):reason=reason+str(i)+'.'+scores[words[1]][i][0]+'\n  记分数:'+scores[words[1]][i][1]+'\n  理由:'+scores[words[1]][i][2]+'\n'await reply.finish(words[1]+' 记分明细如下:\n'+reason)else:await reply.finish(words[1]+' 无记分记录')if user_msg[0:2]=='穷举':await reply.finish('全部记录如下:'+str(scores))except KeyError:await reply.finish()

这是第二个,用于在QQ群中发送rcon命令

from rcon import MCRcon
from nonebot.adapters.cqhttp import Bot, Event
from nonebot.plugin import on_messagedef rcon_send(ip,port,key,command):with MCRcon(ip, key, port ) as mcr:resp = mcr.command(command)return respservers={'name':["ip",port,'key',['op']]}reply = on_message(priority=100)@reply.handle()
async def reply_handle(bot: Bot, event: Event):try:#获取聊天内容user_msguser_msg = str(event.get_message()).strip()#获取发消息的人user,群号qunmsg = str(event.get_session_id())user = msg.split("_")[2]qun = msg.split("_")[1]# 消息空格分割列表wordswords = user_msg.split(' ')if words[0] == 'rcon':if words[1] not in servers:await reply.finish('服务器未被记录')elif user in servers[words[1]][3]:try:ret = rcon_send(servers[words[1]][0], servers[words[1]][1], servers[words[1]][2], words[2])await reply.finish(ret)except:await reply.finish('无法连接至服务器rcon')else:await reply.finish('您没有连接服务器的权限')except KeyError:await reply.finish()

自制QQ机器人插件笔记[nonebot2部署于ubuntu系统服务器]相关推荐

  1. Nonebot QQ机器人插件五:随机网易云音乐

    QQ机器人插件五:随机网易云音乐 1. 导入需要使用的包 import nonebotfrom nonebot import on_keyword # 事件响应器函数 from nonebot.typ ...

  2. Nonebot QQ机器人插件三:王者荣耀猜英雄游戏

    Nonebot QQ机器人插件三:王者荣耀猜英雄游戏 1. 数据录入 首先需要获取相应数据这里可以直接访问**「heros.xlsx」https://www.aliyundrive.com/s/3iN ...

  3. Nonebot QQ机器人插件九:qq群聊天记录词云图

    QQ机器人插件九:qq群聊天记录词云图 1. 将实时聊天记录保存到数据库 安装数据库可自行到网上查找,本文仅使用mysql数据库为例.linux下mysql数据库安装可参考(59条消息) Linux安 ...

  4. Python实现快递查询-QQ机器人插件

    目录 1.API接口请求 2.创建成新的QQ插件 Python实现快递查询功能.Python爬虫一直是一样好东西!只要想就可以爬取自己想要的对象!本次,将使用Python3.9即requests库AP ...

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

    QQ机器人插件六:随机笑话(语音) 1. 导入需要使用的包 import nonebotfrom nonebot import on_keyword # 事件响应器函数 from nonebot.ty ...

  6. Nonebot QQ机器人插件四:每日一图

    QQ机器人插件四:每日一图 1. 导入需要使用的包 import nonebotfrom nonebot import on_keyword # 事件响应器函数 from nonebot.typing ...

  7. ③ESP8266 开发学习笔记_By_GYC 【虚拟机Ubuntu系统的安装】

    目录 ③ESP8266 开发学习笔记_By_GYC [虚拟机Ubuntu系统的安装] 一.获取最新稳定版本的Ubuntu系统安装包. 二.软件安装 三.接下来 ③ESP8266 开发学习笔记_By_G ...

  8. 从零开始在服务器上搭建QQ机器人——插件(二)

    一.简介 在做完基本构建之后,自己的机器人旧可以开始使用了,但是只有一个内置的/echo命令.功能不够丰富. 因此,需要安装插件来获得更多的功能. 二.配置 参照nonebot的官网,编写命令 | N ...

  9. qq机器人插件之奥运奖牌获得数量

    在之前的文章讲到了如何制作机器人,传送门:qq机器人制作 今天呢,我来给大家分享一个插件,先看效果: 交流群:970353786,非诚勿扰. 源码如下: """ 作者:星 ...

  10. 【最新】QQ机器人插件

    QQ机器人 前言 QQ机器人功能展示 一.如何白嫖(用别人的插件) 二.如何自力更生(自己写) 前言 本文旨在如何为你的QQ机器人添加插件,也就是添加机器人的功能.添加插件的方法有两种,一种是用别人写 ...

最新文章

  1. 丘维声高等代数pdf_2020年兰州大学高等代数真题出处简直惊讶
  2. 机器学习技巧:如何(以及为什么需要)创建一个好的验证集
  3. 转: MySQL 赋予用户权限(grant %-远程和localhost-本地区别)
  4. dfs剪枝:洛谷P2809 hzwer爱折纸
  5. python控制灯_Python 控制树莓派 GPIO 输出:控制 LED 灯
  6. 作者:李明,男,中兴通讯股份有限公司产品经理。
  7. PHM算法与智能分析技术
  8. 基于DPI(深度报文解析)的应用识别2------实际分析
  9. python win32api键盘_python基于win32api实现键盘输入
  10. 对抗生成网络GAN系列——CycleGAN简介及图片春冬变换案例
  11. Altium Designer快捷键总结
  12. 分析一种简单的提高功率因数的电路——填谷电路
  13. 如何在谷歌地球上画路线或者运动轨迹?根据纬经高信息在谷歌地球Google earth中画运动轨迹,首先将Excel文件纬经高信息转换为.csv文件,再转换为.kml文件,最终在谷歌地球中显示。
  14. GBase产品学习-8a支持隐式转换
  15. 2021年煤矿安全检查考试APP及煤矿安全检查找答案
  16. 开源版本的《植物大战僵尸》
  17. 折叠屏将至,vivo X系列开启十年高端跃阶
  18. 【DLY-310端子排型电流继电器】
  19. web调用IC卡读卡器开发第一章(转载)
  20. 不上浏览器也可以下载美图了(python 批量爬取搜狗图片)

热门文章

  1. Word 复制或编辑公式就卡死
  2. 时间序列分析——自回归移动平均(ARMA)模型
  3. 扎克伯格让员工学会高效工作的26张PPT
  4. python turtle库seth_python学习篇,turtle库
  5. java 获取中文拼音首字母(缩写) 含pinyin4j maven包
  6. access查询女教师所有的信息_[转载]ACCESS2007查询操作案例补充
  7. 【项目篇- 封面后目录前的核心内容、优势展示部分如何打磨?(超全图文总结建议)】创新创业竞赛项目计划书、新苗国创(大创)申报书
  8. cad批量打印快捷键_批量打印CAD图(无删减版)
  9. 2019华为网络技术大赛模拟题
  10. 流体力学CFD前处理软件-Gambit