机器人状态临时更改
Posted
技术标签:
【中文标题】机器人状态临时更改【英文标题】:Bot status changes temporary 【发布时间】:2020-11-06 22:36:31 【问题描述】:我设置了 PresenceUpdate,因此当特定用户流式传输机器人状态更新并在频道中宣布时。它确实宣布并且运行良好,但机器人状态似乎只改变了约 20 秒,然后它会回到默认状态。
我尝试使用以下方法修复它:
For 循环 While 循环 递归函数谁能帮我解决这个问题?这是我的代码:
client.on("presenceUpdate", (oldPresence, newPresence) =>
let announcement = "Announcement Message";
if (!newPresence.activities) return false;
newPresence.activities.forEach(activity =>
if (activity.type == "STREAMING")
if(newPresence.user.id == "ID OF USER STREAMING")
console.log(`$newPresence.user.tag is streaming at $activity.url.`);
client.channels.cache.get("My Channel ID").send(announcement);
client.user.setActivity("to the server", type: "STREAMING", url: "Twitch Link");
;
;
);
);
编辑:好的,所以我设法通过删除如果他们没有流式传输状态返回默认值的部分来修复它。但是,现在即使用户不再流式传输,它也会卡在流式传输上。我该如何解决这个问题?代码也更新了。
【问题讨论】:
【参考方案1】:您可以将流式传输用户的 id 存储在某处,然后在更新状态时检查是否是同一用户。
这是一个例子:
if (client.streamingUserID !== undefined && client.streamingUserID !== newPresence.user.id) return;
newPresence.activities.forEach(activity =>
if (activity.type == "STREAMING")
if(newPresence.user.id == "ID OF USER STREAMING")
console.log(`$newPresence.user.tag is streaming at $activity.url.`);
client.channels.cache.get("My Channel ID").send(announcement);
client.user.setActivity("to the server", type: "STREAMING", url: "Twitch Link");
client.streamingUserID = newPresence.user.id;
;
else
// set back activity to default and
delete client.streamingUserID;
);
【讨论】:
第一个 if 语句有错误,我不得不将!===
更改为 !==
。现在我只是在等待流媒体上线,看看它是否有效。我会尽快更新你。
@JustCVhilling 抱歉,这里有个小错字^^'
它不起作用,状态现在消失了,并没有将其设置为流模式或任何东西。我只想让它处于流模式,当用户停止流时它也会停止
@JustCVhilling 实际上,我想知道您为什么要使用 forEach 循环?为什么不抓住第一个活动,然后做你的事情呢?顺便说一句,我可能在上次编辑中添加了修复
我最近问了一个问题来更新presenceupdate的代码。你可以在我的页面上找到它,如果有更好的方法可以更好地检测特定用户而不是我必须使用 forEach 循环,那么这就是我正在使用的代码。以上是关于机器人状态临时更改的主要内容,如果未能解决你的问题,请参考以下文章