如何使“消息”和“频道”在一个 () 下可定义
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 的特定频道机器人