-
Notifications
You must be signed in to change notification settings - Fork 0
使用 hackchat-botlib 来在hackchat构建Bot是一个容易的事情,只需要你掌握nodejs的基础知识,就可以轻松构建
首先,你需要通过下面方法引入这个库
let Client = require("./HackChat-BotLib.js");
你可以使用 new Client("ws://xxxx")
来创建一个新的hc客户端,然后通过在 onjoin 函数使用join方法来加入一个频道
let Client = require("./HackChat-BotLib.js");
let client = new Client("wss://hack.chat/chat-ws");
let join_channel = "lounge";
client.onjoin = () => {
client.join({ //发送加入数据包
channel: join_channel,
nick: 'my_bot',
password: '123456'
})
//也可以读取 client.joined 判断有没有加入频道
}
client.join 返回一个 布尔值 ,告诉你是否加入成功,但是如果出现Rate Limit,那么还是返回加入成功,如果要检查所有的加入,需在 client.joinfailed
函数处理,这个会传入失败的提示内容
client.joinfailed = (reason) => {
console.log("加入失败",reason);
client.close();
}
但是如果遇到验证码,那么会调用到 client.oncaptcha
,你可以在 client.oncaptcha
使用 client.chat('验证码')
来通过验证码,但这一般不常用
client.oncaptcha = () => {
console.log("频道要求验证码!");
client.close()
}
加入成功后,会触发 client.onjoined
函数,你可以在这里写上机器人加入聊天室成功(但是如果锁房,那么也会识别为加入成功【加入到了炼狱】,这时候使用 client.chat
会变成emote,因为炼狱不能使用聊天功能,但是emote和私信是可以的)
client.onjoined = () => {
client.chat("Hello, world!");
console.log("加入成功");
}
你可以设置client.ping
的值来定时检查是否被踢出(这个值是一个number,小于1000为1000),设置为0不检查,越大越久才检测到,越小越容易Rate Limit
client.ping = 10000;
在发现频道发生改变(可能被踢出或者移动)后,client.onchangechannel
会被触发(这个函数会传入新的频道):
client.onchangechannel = (channel) => {
console.log("被踢出或者移动到了"+channel)
}
在执行操作太快的时候,往往会频率限制,你可以用 client.onratelimit
监听是否频率限制了,其中会传入下面 6 种文本的其中一种
You are joining channels too fast. Wait a moment and try again.
You are changing colors too fast. Wait a moment before trying again.
You are sending invites too fast. Wait a moment before trying again.
You are changing nicknames too fast. Wait a moment before trying again.
You are sending too much text. Wait a moment and try again.\nPress the up arrow key to restore your last message.
You are rate-limited or blocked.
client.onratelimit = (text) => {
console.log("频率限制了:"+text)
}
你可以使用 client.close(reason(可选))
来关闭客户端连接,其中的reason会被传递给 client.onclose
函数:
client.onclose = (reason) => {
console.log(`连接断开`,reason);
process.exit(1);
}
client.close("test");
你可以使用 client.chat
或者 client.emote
来发送一条公屏消息
你可以使用 client.chat(text,customId)
来发送一个带有customID的消息(但是emote不能),这可以让你通过 client.updatemessage(customId,mode,text)
来修改你的消息
overwrite | append | prepend | complete |
---|---|---|---|
覆盖文本 | 添加文本到末尾 | 添加文本到前面 | 完成更新(这会让这个消息不能再被upDateMessage) |
建议使用 client.getcustomId()
来生成一个不重复的id
注:client.updatemessage
和client.chat
都返回一个布尔值代表这个操作是否初步执行成功(如果出现了Rate Limit导致不能执行,那么还是会返回true)
你可以使用 client.reply(obj)
来直接生成一个 hc++ 同款引用内容,其中需要传入包含{nick:...,trip:...,...}
的消息数据,生成如下的内容
>2ZQ3+0 24a_:
>let me show you how easy is coding a bot in hvicorn
@24a_
你可以使用 client.whisper(nick,text)
私信一个用户一些内容
使用一些函数快捷获取一个或多个用户信息
通过 client.sel[XXX]
(其中 [XXX] 可以是 Trip
、Nick
、Hash
)
client.selNick(xxx)
返回一个obj,这个obj就是这个用户的信息,如果找不到这个用户,那么这个值将是 null
client.selTrip(xxx)
返回一个或多个匹配这个trip的用户信息obj组成的数组,这个obj就是这个用户的信息
client.selHash(xxx)
返回一个或多个匹配这个hash的用户信息obj组成的数组,这个obj就是这个用户的信息
你可以修改 client.onmeeaage
函数来接受服务器消息
client.onmessage = (raw, json) => {
console.log(raw); //服务器原始数据;
console.log(json); //解析改进后的数据Obj
}
服务器发送的原始字符串数据
经过解析和增加的数据,比如添加了 changeNick 的 cmd
{
"cmd": "changeNick",
"nick": "修改前的用户名",
"to_nick": "修改后的新名称"
}
还有在私信消息和emote时,添加了 msg 内容(用户原始数据)还有 nick (用户名,解决了私信的用户名是from而不是nick的问题)
私信改成了 cmd:whisper
(之前是cmd:info
+type:whisper
)
{
"cmd": "whisper",
"from": "dpg",
"nick": "dpg",
"msg": "awa",
"text": "@dpg whispered: awa",
"..."
}
{
"cmd": "emote",
"nick": "dpg",
"msg": "6",
"text": "@dpg 6",
"..."
}
以及 updateMessage 添加了 nick 和 trip
{
"cmd": "updateMessage",
"userid": 726134175636,
"mode": "overwrite",
"text": "good",
"customId": "0",
"nick": "dpg",
"..."
}
还有邀请
{
"cmd": "invite",
"nick": "MelonCmd",
"to": "i love 4n0n4me\nawa"
}