node.js - 如何使“消息”和“频道”在一个 () 下可定义
问题描述
我正在设置一个机器人(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”时,控制台显示错误并询问频道的定义,而您根本没有被赋予角色。
解决方案
问题在于您如何尝试和访问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);
}
}
})
推荐阅读
- c# - RabbitMQ 响应在控制器中丢失
- docker - Traefik 和 Nginx 在 Docker 上使用 HTTPS / 400 错误请求
- api - API 文档 _ 如何更改每个 API 的模型格式?
- gnuradio - Gnuradio 输出项目数
- vba - 使用 VBA 按钮宏打开表格(从工具栏)
- c++ - 读取二进制数据以查找十六进制序列
- mysql - 在 Azure 中部署 ASP.NET MVC Web 应用程序的数据库问题
- apache-spark - Spark 无法解析时间戳文件
- javascript - Javascript Vue 或 React 存储敏感信息客户端安全
- python - 减少和一个 numpy 数组的最有效方法(使用 autograd)