如何解决如何定义@提到的是否是订阅者? TMI.js
试图为我朋友的抽搐制作一个小机器人,并想让它定义“@提到的”是否是一个子。 我决定先测试它是否定义了 mods 但它总是说“2”
client.on("chat", function (channel, user, message, self) {
if (message.toLowerCase().startsWith("!love")) {
var loved = message.split(' ')[1];
if (loved.mod || loved['user-type'] === 'mod'){
client.action(channel, "1 "); //says sth
}
else {
client.action(channel, "2 ");//says sth different
}
}
解决方法
user.mod
仅可用于消息处理程序返回的用户对象。如果您想检查提到的用户是否是模组,您必须请求聊天列表
function getAllChatters(channel,_attempts) {
return rp({
uri: `https://tmi.twitch.tv/group/user/${channel.replace('#','')}/chatters`,json: true
})
.then(data => {
return Object.entries(data.chatters)
.reduce((p,[ type,list ]) => p.concat(list.map(name => {
return {name,type};
})),[]);
})
.catch(err => {
if(_attempts < 3) {
return getChatters(channel,_attempts + 1);
}
throw err;
})
}
然后只过滤它的模组
function getModsOnline(channel) {
return getAllChatters(channel)
.then(data => {
var mods = data.filter(chatter => chatter.type == 'moderators' || chatter.type == 'broadcaster').map(chatter => chatter.name);
return mods;
})
}
然后查看用户是否在列表中
function isModOnline(channel,username) {
// This will only return true if the mod is online in chat aka in the chat list
return getMods(channel)
.then(mods => {
return mods.includes(username);
})
}
记住这一点
-
这是为了获取模组,而不是订阅者
-
它仅适用于当前处于聊天状态的模组,该列表往往更新缓慢
-
你需要在这里使用 Promise
const rp = require('request-promise');
并使用该值
```
isModOnline(channel,username)
.then(value => {
// Code to work with the value here
console.log(`User is mod: ${value}`);
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。