快速入门 - Shimogawa/rubirai 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'

登入之后,bot 将会记住你的 session key,存在 session 字段中,通过 bot.session 获取。

登出

bot.session 不能也不应该在外部修改,因为如果想要换 bot 账号登录,那么需要先登出机器人。可以调用 logout 方法登出:

bot.logout

在登出后可以重新登入,然后调用其他 API。

调用 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 数组,可以是任意对象。如果是 MessageMessageChain,那么会直接用它拼接成 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 的好友。