%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8 - Shimogawa/rubirai GitHub Wiki
Rubirai 不提供(并且不准备提供)配置文件。所有的配置在初始化机器人时传入即可。所有类均在 Rubirai
module 下。
首先,需要知道 mirai-api-http 所在的 IP 与端口号。假设 IP 是 127.0.0.1
(本地),端口号是 8888
,那么机器人可以这样初始化:
require 'rubirai'
bot = Rubirai::Bot.new '127.0.0.1', 8888 # port 可以是 Integer, String
然后,调用 login
方法登录 api 上的账号。你需要知道账号的 QQ 号和你创建 Mirai-Http-Server 时生成的 authkey。假设 QQ 号是 1145141919,authkey 是 abc,那么登录是这样的:
bot.login 1145141919, 'abc'
0.1.x 版本不同
0.1.x 版本对应 mirai-api-http 1.x 版本,没有 skip_bind
选项。
额外有 skip_bind
选项,如果开启了 singleMode
那么可以加上 skip_bind: true
。
登入之后,bot
将会记住你的 session key,存在 session
字段中,通过 bot.session
获取。
bot.session
不能也不应该在外部修改,因为如果想要换 bot 账号登录,那么需要先登出机器人。可以调用 logout
方法登出:
bot.logout
在登出后可以重新登入,然后调用其他 API。
调用 API 全部都是在 Rubirai::Bot
上的方法,方法名可以看文档,全部使用蛇形命名法(snake_case
)。
如果返回的状态码不是 0
,那么会报 Rubirai::RubiraiError
错误,具体的状态码有这些。
bot.send_temp_msg 1145141919, 123456789, 'hi', Rubirai::ImageMessage.from(url: 'http://image'), Rubirai::AtMessage.from(123321132)
这里发送了一个临时会话消息。具体有关事件类型,请看事件类型。有关发送的消息组成,请看消息类型。
Rubirai 提供了事件监听的接口。你只需要调用 bot.add_listener do |event| ... end
即可添加监听函数,然后使用 bot.start_listen(0.5)
开始监听。默认不会阻塞当前线程,但是也可以指定阻塞当前线程监听: bot.start_listen(0.5, is_blocking: true)
。
bot.add_listener do |event|
puts event.inspect
case event
when Rubirai::MessageEvent
event.respond("Hello, world!")
when Rubirai::BotInvitedToGroupEvent
event.respond(Rubirai::GroupInviteRequestOperation::Approve)
else
# do something else
end
end
bot.start_listen 0.5, is_blocking: true
所有消息类型都有构建方法 #from
,参数为 **kwargs
哈希,具体参数可以参照 mirai-api-http 消息类型,不要忘记全部使用蛇形命名法。
如果你不想使用 #from
,那么你可以直接使用类名作为方法,比如
Rubirai::AtMessage(target: 1234567)
# same as
Rubirai::AtMessage.from(target: 1234567)
具体消息类型详见文档。
在调用发送消息接口时,传入的是 *msg 数组,可以是任意对象。如果是 Message
和 MessageChain
,那么会直接用它拼接成 MessageChain
;如果是 Hash
,那么会尝试将其变成一个消息类型,如果出错会直接报错,所以不推荐使用哈希(如果要使用哈希的字符串表示,建议先用 Json 序列化,或者调用 to_s
方法变成字符串);如果是任意其它类型,那么会直接调用 to_s
方法将其转成字符串后变成 PlainMessage
进行拼接。例如:
bot.send_friend_msg 123456789, 'hello, ', 'world!', 3, Rubirai::ImageMessage(url: 'https://image')
这个例子中,发送出去的消息链就是 [PlainText('hello, world!3'), Image('https://image')]
,发送给 QQ 号为 123456789 的好友。