从这里开始第一次开发! - JustMon1ka/QQ-Bot-New GitHub Wiki
LLOneBot框架官方文档:https://llonebot.github.io/zh-CN/guide/getting-started ↑首先先按照官方文档的教程安装LLOneBot框架到NTQQ客户端上。(强烈建议使用一个小号进行部署)
在LLOneBot插件设置页面中勾选“启用HTTP服务”,并且设置“HTTP服务监听端口”。然后勾选“启用HTTP事件上报”,并且设置上报的地址,设置完成后,一定要点击“保存”按钮。
(如果你并不清楚这些设置是干什么的,建议完全按照上图所示的设置来设置)
主要是确保LLOneBot被正确的配置,并且其本身功能能够正常运行,可以通过以下步骤检查LLOneBot是否能够接受指令和上报消息:
找到项目根目录下的测试程序test.py,根据你在LLOneBot中的设置修改.py文件中对应的参数的值,然后运行该程序(需要先安装对应的第三方库)。
当终端出现如上图所示的信息说明程序已经开始运行了,此时向作为bot的那个账号发送一条私聊消息,如果该账号自动重复了你发的消息,如下图:
说明LLOneBot已经在正常工作了
找到本框架的配置文件(项目根目录下的BotConfig.ini),你应当看到如下的配置参数:
[Init]
server_address = bot.server.address:5700
client_address = 127.0.0.1:7000
web_controller = 127.0.0.1:7001
bot_name = <bot_name>
debug = True
database_enable = False
database_username = admin
database_address = bot.database.address:3306
database_passwd = <passwd_here>
database_name = bot
对各参数的解释:
(注意所有的地址类型的配置项都要指定端口号,即":5700"这样的)
server_address - 运行着LLOneBot的电脑的ip地址,端口号是之前LLOneBot中设置的HTTP服务监听端口(上图那个5700所在的设置项,即如果你完全安装上图来设置的LLOneBot,这里的端口号直接写为5700),如果是本机,则为127.0.0.1(默认配置中的bot.server.address是我在hosts文件中指定的ip地址,如果你不知道怎么修改hosts文件,则直接把他改为127.0.0.1即可)
client_address - 本机的监听地址(即LLOneBot上报消息中设置的上报地址,如果你之前在设置LLOneBot时完全按照教程来的,把端口号设置成5701即可),后面不要跟/onebot
web_controller - bot网页控制面板开启地址,在浏览器访问该地址即可进入bot远程管理面板
bot_name - 你想给bot取的名字
debug - 是否开启调试模式(开启后会输出更详细的运行日志)
database_enable - 是否启用数据库,如果不启用,就不需要填写后续database的配置,但是所有涉及到与数据库连接的插件将被强制禁用
database_username - bot使用的数据库的登录用户名
database_address - bot使用的数据库的ip地址(如果你有自己的MySQL数据库,也可以使用你自己的数据库,bot.database.address也是在hosts文件中指定的ip地址)
database_passwd - bot使用的数据库的登录密码
database_name - bot使用的数据库的名字
当配置文件配置完成后,就可以运行本框架了,程序入口:项目根目录的main.py
只要启动的时候没有报错,就说明本框架已经成功开始运行了,这时候你可以用浏览器访问配置文件中指定的web_controller的地址进入bot控制面板,检查bot的运行情况。
在控制面板的插件管理中启用SayHello插件,然后私聊向bot发送Hello,如果bot自动回复了你,说明框架已经在正确的运行了。
所有的插件都应当放到 项目根目录/Plugins 目录下,不然是无法被框架识别到的,在Plugins目录下有一个TestPlugins文件夹,其中提供了一个插件的模板,使用该模板,再仿照着其他已有的插件尝试开发你的第一个插件吧!(推荐从制作一个复读自己说的话的插件开始入门)
一个复读插件,应该达到的效果是:我向bot发送一条消息(比如"aaa"),bot应该回复我同样的消息(“aaa”)。
那么要实现复读插件:
- 我需要让bot知道我对它发了什么
- 我需要让bot知道是谁给它发的消息(QQ号)
- 我需要让bot在收到我给它发的消息后再向我的QQ号发送同样的消息
前面我已经知道有一个叫SayHello的插件,它实现了在收到我发送的特定消息“Hello”后,可以向我再发送一条特定的消息“Hello World!”。
那么我可以推测:
- 这个插件实现了知道我是谁,我发了什么消息
- 这个插件实现了向我发送一条特定消息的指令
在了解这些后,我决定查看SayHello插件的源码,来试图找到怎么实现上述目的的方法......
打开Plugins/SayHello文件夹,我看到了以下文件:
是__init__.py吗?
这个文件中只有一句话,怎么看都不是。
那是config.ini吗?config我知道是配置的意思,那这个文件大概也不是。
那最后只剩下一个文件了:SayHello.py,我打开它:
里面这么多python代码,那它大概就是了!
但是我仔细一看:这些代码都是神马意思啊!我根本看不懂唉!
但是我知道def是定义函数的意思!我在这堆乱码中找到了一个叫def main的关键字,根据我学过高程的经验,main函数一般就是程序的入口了吧?带着这个猜想,我决定从这一行开始看起......
很快我的目光移动到了这一行:
if message == "Hello"根据我学过的python基础语法,我知道这是在判断一个叫message的变量是不是跟"Hello"这个字符串相同,这不正是SayHello这个插件要干的事情吗?我发送一个Hello,它回我一句Hello World!而我发其他消息的时候它不会回复我。
所以我大概可以确定,这个message,就是bot收到的我发送的消息的原文,那么它是怎么来的呢?我往上看一行:message = event.message 我只知道这一行确实定义了message这个变量,并且给它赋值了,而且在其他上文的任何地方,都没有再出现对message的定义和赋值。那么我觉得这里就是message的获取方法了!直到这一步,我已经解决了第一个问题:bot怎么知道我对它发了什么。
接下来我继续往下看,直到这一行:
___这一行我完全看不懂是什么意思唉!___但是我看到了其中有串英文叫“send_private_msg”,翻译过来意思是“发送 私有的 msg”,msg是什么意思?带着这个疑问我去网上搜索了一下:
原来msg就是message的缩写呀!那上面那个英文连起来就是“发送 私有的 消息”,不就是发送私聊消息的意思吗!直到这里,我大概知道了,这一行就是在执行发送消息的命令,这个“send_private_msg”后面还跟了一个括号,应该就是调用函数的意思了。send_private_msg(user_id, reply_message)看起来是有两个参数:user_id和reply_message,它们是在哪里定义的呢?我将目光往上移,于是看到:
看来这里就是定义这两个变量的地方了,但是它们是什么意思呢?光从赋值语句我还是看不懂它们是干什么的,但是从之前梳理的流程来看,让bot向我发送消息需要知道我的QQ号和要向我发送什么消息。这里的参数中有一个叫reply_message的翻译过来就是“回复 消息”大概就是要向我发送的消息吧,这样推断,前面那个user_id只能是我的QQ号了。不管它是怎么知道我QQ号的,总之只要写user_id = event.user_id 就能获得我的QQ号了吧!先把它记下来,以及这一串await self.api.privateService.send_private_msg(user_id, reply_message)就是用来发送消息的。现在我大概解决了第二,三个问题了:bot怎么知道我(发送者)的QQ号,以及怎么发送消息。
(这一步我先不手把手教了,如果大部分人仍然觉得难以继续,后续我再更新这一部分)