如何使“消息”和“频道”在一个 () 下可定义

Posted

技术标签:

【中文标题】如何使“消息”和“频道”在一个 () 下可定义【英文标题】:How to make "message" and "channel" defineable under one () 【发布时间】:2019-06-21 01:31:28 【问题描述】:

我正在设置一个机器人(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”,您将获得引用禁止角色

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

【问题讨论】:

【参考方案1】:

问题在于您如何尝试访问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);
    
  
)

【讨论】:

我把它放在TypeError里的时候是这么说的:message.member.addrole is not a function 根据the docs 应该可以工作。尝试记录 bannedRole 并查看内容。可能找不到角色 我刚刚看到我的错误,不是addrole,它必须是addRole(大写很重要)。我会更新我的答案 它只是给出了这个错误代码 (node:40514) DeprecationWarning: Collection#find: pass a function instead @SomePerson 我再次更新了我的答案,它现在在数组的.find 中有一个函数

以上是关于如何使“消息”和“频道”在一个 () 下可定义的主要内容,如果未能解决你的问题,请参考以下文章

如何使 discord.js 机器人在另一个频道中重复给它的消息?

如何使不和谐机器人将消息发送到不和谐 Node js 的特定频道机器人

Discord Bot 删除特定频道中的消息

如何使用 Bash 编写的 IRC 机器人从 IRC 频道读取消息?

如何删除消息并将它们记录回另一个频道

Discord py 将在一个频道上发送的消息(带有嵌入)转发到另一个频道以及如何确定服务器中的成员数量?