首页 > 解决方案 > 如何使“消息”和“频道”在一个 () 下可定义

问题描述

我正在设置一个机器人(VSC,Discord.JS)来执行以下操作;如果您在特定频道中发送一条消息,您将立即获得一个角色,使您无法再次在该频道中发言。所以基本上是一个一次性的消息频道,您仍然可以在之前或之后阅读。一次性消息和之前或之后阅读的部分仍然包括在内。但并未涵盖对机器人进行编程以自动化该过程。控制台说channel.id不能定义,没有定义也不知道怎么加进去。

浓缩摘要:如何将消息和频道定义合二为一?

我在 Google 上搜索了将消息和频道定义组合在一起的解决方案,但失败了,我找不到任何解决方案。

doopliss.on('消息',函数(消息){

if(message.content == 'a')
if(channel.id == '539228268893569044')
{
    member.gulid.roles.find("name", "Quote Banned");
    member.addrole("name", "Quote Banned");
}})

我希望:机器人知道您何时键入“a”,然后如果在具有指定 ID 的频道中说“a”,您将获得 Quote Banned 角色

实际发生的情况:在指定 ID 的频道中说“a”时,控制台显示错误并询问频道的定义,而您根本没有被赋予角色。

标签: node.jsvisual-studio-codediscord.js

解决方案


问题在于您如何尝试和访问channel. 如果您这样做,channel.id您的代码会搜索一个名为 的变量channel,您可能没有设置该变量,并尝试调用该id变量的属性。(我认为)你需要的是message.channel.id.

除此之外,您还尝试根据member您还没有定义的变量从公会中找到“引用禁止”角色。此外,您不会将找到的角色保存在任何地方以便以后将其分配给用户。

看看这段代码并试一试。

doopliss.on('message', function(message) {
  if(message.content == 'a') {
    if(message.channel.id == '539228268893569044') {
      let bannedRole = message.guild.roles.find(role => role.name === "Quote Banned");
      message.member.addRole(bannedRole);
    }
  }
})

推荐阅读