为什么我用于检查用户名是否在数组中的函数返回 'false' 而用户名是?
Why is my function for checking if a username is in an array returning 'false' when the username is?
我目前正在开发 Twitch 聊天机器人,我正在尝试
实现一个功能,该功能将查看用户是否是聊天中的 moderator
或全局 moderator。如果用户是,该函数应该 return true
频道中的 moderator 或代码中的全局 moderator。
否则,return 为假。全局 mod 运算符数组是
['toximixes', 'lucidzbot']
.
到目前为止,检查用户是否是 moderator 对我来说工作正常
使用(tmi.js),但查看用户名是否存在于全局
moderators 数组由于某种原因无法正常工作。
这是我当前使用的函数:
function isMod(user) {
if (user.mod == true) {
return true;
} else {
chnls.forEach(function(val,i){
if (val == user.username) {
return true;
}
});
}
return false;
}
该函数接受一个参数,即用户状态对象
发送消息时由 tmi.js 提供,但为了简单和
调试目的我正在使用这 3 个对象:
{
username:"demo",
mod: false
}, // should be false
{
username:"demo-2",
mod: true
}, // should be true
{
username:"toximixes",
mod: false
} // should be true
前两个对象完美运行,但出于某种原因,第三个
对象保持为假。这是一个问题,因为 tmi.js 没有
将广播者(在这种情况下是我)视为 mod,所以当
我在聊天中 运行 命令,我的帐户显示为 mod:false
.
如果发生这种情况,函数是应该检查我的用户名
针对全局 moderators 数组,如果找到匹配项,
return 是的。但是,出于某种原因,它是 returning false 并且没有错误
在控制台或聊天中为我显示。
这是我尝试过的方法:
- 在数组上使用 for i++ 循环,并检查当前项
针对用户名;
- 在数组上使用 for-in 循环,并根据用户名检查项目,两者都严格相等 (
===
) 然后尝试另一个 (==
);
- 使用数组的
forEach
根据用户名检查每个项目;
- 再次使用
forEach
查看项目 includes
是否完全是用户名
但到目前为止 none 我正在尝试的是有效的。尽管我拥有一切
聊天中的权限,功能 - 以及整个
bot -- 对待我几乎和普通观众一样。
事实上,这不仅发生在我的用户名上,函数也发生了
这适用于每个非 Twitch-mod 即使它们应该是
全局-mod。这是怎么回事?我该如何解决这个问题?
试试这个:
function isMod(user) {
if (user.mod == true) {
return true;
} else {
return chnls.some(function(val){
return val == user.username;
});
}
}
您可能需要 Array.prototype.some
的 pollyfil
您实际上不需要遍历数组。 Array.prototype.includes() 工作正常。
试试这个:
function isMod(user) {
if (user.mod == true) {
return true;
} else if (chnls.includes(user.username)) {
return true
}
return false;
}
我目前正在开发 Twitch 聊天机器人,我正在尝试
实现一个功能,该功能将查看用户是否是聊天中的 moderator
或全局 moderator。如果用户是,该函数应该 return true
频道中的 moderator 或代码中的全局 moderator。
否则,return 为假。全局 mod 运算符数组是
['toximixes', 'lucidzbot']
.
到目前为止,检查用户是否是 moderator 对我来说工作正常 使用(tmi.js),但查看用户名是否存在于全局 moderators 数组由于某种原因无法正常工作。
这是我当前使用的函数:
function isMod(user) {
if (user.mod == true) {
return true;
} else {
chnls.forEach(function(val,i){
if (val == user.username) {
return true;
}
});
}
return false;
}
该函数接受一个参数,即用户状态对象 发送消息时由 tmi.js 提供,但为了简单和 调试目的我正在使用这 3 个对象:
{
username:"demo",
mod: false
}, // should be false
{
username:"demo-2",
mod: true
}, // should be true
{
username:"toximixes",
mod: false
} // should be true
前两个对象完美运行,但出于某种原因,第三个
对象保持为假。这是一个问题,因为 tmi.js 没有
将广播者(在这种情况下是我)视为 mod,所以当
我在聊天中 运行 命令,我的帐户显示为 mod:false
.
如果发生这种情况,函数是应该检查我的用户名 针对全局 moderators 数组,如果找到匹配项, return 是的。但是,出于某种原因,它是 returning false 并且没有错误 在控制台或聊天中为我显示。
这是我尝试过的方法:
- 在数组上使用 for i++ 循环,并检查当前项 针对用户名;
- 在数组上使用 for-in 循环,并根据用户名检查项目,两者都严格相等 (
===
) 然后尝试另一个 (==
); - 使用数组的
forEach
根据用户名检查每个项目; - 再次使用
forEach
查看项目includes
是否完全是用户名
但到目前为止 none 我正在尝试的是有效的。尽管我拥有一切 聊天中的权限,功能 - 以及整个 bot -- 对待我几乎和普通观众一样。
事实上,这不仅发生在我的用户名上,函数也发生了 这适用于每个非 Twitch-mod 即使它们应该是 全局-mod。这是怎么回事?我该如何解决这个问题?
试试这个:
function isMod(user) {
if (user.mod == true) {
return true;
} else {
return chnls.some(function(val){
return val == user.username;
});
}
}
您可能需要 Array.prototype.some
的 pollyfil您实际上不需要遍历数组。 Array.prototype.includes() 工作正常。
试试这个:
function isMod(user) {
if (user.mod == true) {
return true;
} else if (chnls.includes(user.username)) {
return true
}
return false;
}