需要一些有关我的代码的帮助。我今天开始使用Node.JS和Discord.JS库以及其他不久的东西来编码我的第一个Discord机器人。我目前正在使用YouTube视频来指导我完成Node.JS。这是我的问题。
这是我当前的代码。
const Discord = require('discord.js');
const bot = new Discord.Client();
bot.on('message', (message) => {
if(message.content == 'ping') {
message.reply('pong');
}
if(message.content == 'xd') {
message.reply('smh');
}
});
此代码可以正常工作。如果转到第二个message.content
,则在其中写入了'xd'
。当我在Discord服务器中写xd词时,机器人将返回smh
。这样做的问题是,只有在大写字母与smh
中的大小写完全相同的情况下,该漫游器才会返回xd
,但是我希望它适用于所有大写字母。
喜欢这个。
if(message.content == 'xd', 'xD', 'XD', 'Xd',) {
message.reply('pong');
}
很明显,上面的代码不起作用,但是有什么简单的方法吗?
干杯。
答案 0 :(得分:1)
您可以在 import sys
sys.path.append('/home/hannes/anaconda3/envs/fenics/lib/python3.6/site-packages')
上调用.toLowerCase()
,将其转换为所有小写字母:
message.content
这样,实际上忽略了邮件的大小写。
答案 1 :(得分:1)
您需要使用toLowerCase()方法将message.content小写,然后使用===运算符将其与“ xd字符串”进行比较
例如:
cursor.getList(...)
答案 2 :(得分:1)
在我回答问题之前,请确保在共享源代码时隐藏机器人的令牌,因为如果拥有正确的权限,人们就可以使用您的机器人来做一些有害的事情。
好的,答案是
在开始时,声明一个名为msg或存储message.content.toLowerCase();
的变量。因此,无论人们如何键入,都将始终是小写。
请注意,仅当message.content为“ xd”时,此功能才有效。因此,如果某人键入“ xD something”,则此功能将无效。
代码中的其他内容:
如果要检查某人是否使用某个前缀来表示命令,则可以检查message.content.startsWith("prefix");
-这将返回true或false。
将消息的内容分解为单独的变量始终是一件好事,这样您就可以轻松地对消息进行操作,例如,命令和args变量(将message.content
转换为数组)。
答案 3 :(得分:1)
除了toLowerCase()
函数之外,还有两种其他主要方法可以允许多个参数。
第一种方法是使用||
运算符或or
运算符。此方法使您可以检查完全不同的单词,同时可以得到相同的结果。例如:
if (message.content == "xd" || message.content == "xD" || message.content == "XD") {
message.reply("Why would you do that");
}
第二种方法是使用正则表达式,例如regexes。正则表达式使用.test()
方法检查字符串中的单词。例如:
let myRegex = /xd/i;
if (myRegex.test(message.content)) { //We are assuming that message.content = "XD"
message.reply("smh");
}
此方法之所以有效,是因为正则表达式会检查单词是否等于为其分配的正则表达式。 i
之后的/xd/
表示它并不关心大小写,因此这是一种无需担心字母大小写即可检查某些单词的较短方法。
答案 4 :(得分:0)
在内容上使用toLowerCase,然后对其进行测试
if (message.content.toLowerCase() == 'xd') {
message.reply('pong');
}
答案 5 :(得分:0)
更好的方法是使用别名...
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
<div class="bar"></div>
如果您希望多个事物运行相同的命令,则上面回答的 //defined early on.
let commands = [
{
aliases:["xd","lol",":smile:"],
run:function(msg){
msg.send(`pong`);
}
},
{
aliases:[":("],
run:function(msg){
msg.send(`why the long face?`);
}
}
]
//later
client.on(`message`,function(msg){
for(let i =0;i<commands;i++){
if(commands[i].includes(msg.content.toLowerCase())){
commands[i].run();
}
}
});
并不总是有效。
上面的代码允许每个命令都使用别名