【发布时间】:2017-08-22 05:04:58
【问题描述】:
我希望创建一个“说”命令,允许我通过机器人直接向特定(或任何,也许)频道发送消息。对于初学者和一般测试目的,我的目标是能够使用标准 if(commandIs("command", message) 直接向我的测试服务器中的频道发送消息,最终演变为服务器上的所有频道。
通过我的研究,我偶然发现了:
var channel = client.servers.get("name", "My Server").defaultChannel;
client.sendMessage(channel, "Hello");
代码,这正是我想要做的基础,因为我可以将 .get("name", "My server") 换成实际的频道 ID,但是通过类似 say 的命令执行此操作会将 var 设置为频道我的代码中的类,不支持.sendMessage()
我当前的命令代码如下:
if(commandIs("speak", message)){
var chat = client.channels.get(18numberID);
if(args.length === 1){
message.channel.sendMessage('You did not say anything. Usage: `a~speak [message]`')
} else {
chat.sendMessage(args.join(" ").substring(8));
-但这会在.sendMessage() 上引发undefinederror,我认为会这样。我已经尝试了message.chat.sendMessage() 和所有其他可能的变化,甚至只用了两行代码在on.ready() 进行测试,但这仍然给我同样的错误。我一直在寻找一种方法来绕过找到 ID 后创建的 Channel 类,这导致我使用了 TextChannel 和 GuildChannel 扩展,但考虑到所有代码,我很确定有一种更简单的方法(甚至这里有几个例子)不包含所有额外的信息。我觉得我正在查看某些内容,或者可能使代码复杂化了超出需要的程度,但我不确定。
任何想法或帮助将不胜感激。
编辑:看来我是对的,我查看了几个关键点,特别是 channelID 周围没有引号是一个字符串。单独尝试了这个命令,一切都很顺利;调整了主要代码,一切顺利。
【问题讨论】:
-
不知道为什么它不返回一个 TextChannel.. 你确定它是一个 TextChannel 吗?也许对客户端或其他东西有(安全性?)限制。也许你应该尝试在 discord.js 服务器上询问 Discord.js Official#222078108977594368
-
我自己也很好奇。作为初学者,我已经尝试了所有可以发现或发现的编码漏洞,但似乎没有任何效果。我会确保联系 Discord.js 官方服务器,看看他们是怎么想的。
-
你的 djs 版本是多少?
-
11.0.至于这个问题,我问了 discord.js 官方服务器,他们帮了我很大的忙。问题在于
.get无法正常工作,因为我的 ID 不是字符串。我在频道 ID 周围使用了引号,但它似乎不起作用,所以我在测试机器人中从头开始重写了代码,一切顺利。在主机器人中做了同样的事情,一切都点击到位。 -
defaultChannel已弃用。
标签: javascript node.js discord discord.js