我有一个非常简单的机器人,正在为我和我朋友的服务器工作。我从我遵循的指南中设置了一个简单的网页抓取功能,以响应前缀命令(!)来从狗形图像搜索中提取gif。
我一直在尝试编辑代码以允许前缀!
后接任何术语,以返回他们使用的该术语的gif,而不是专门为每个命令编写代码。
我想出是否可以用变量'test'
替换字符串!<variable>
到我已经拥有的代码中,但是我似乎不知道。任何指导将不胜感激!
bot.on('message', message => {
let args = message.content.substring(PREFIX.length).split(" ");
switch (args[0]) {
case 'test':
test(message);
break;
}
});
function test(message) {
var options = {
url: "https://results.dogpile.com/serp?qc=images&q=" + "test gif",
method: "GET",
headers: {
"Accept": "test/html",
"User-Agent": "Chrome"
}
};
request(options, function(error, response, responseBody) {
if (error) {
return;
}
$ = cheerio.load(responseBody);
var links = $(".image a.link");
var urls = new Array(links.length).fill(0).map((v, i) => links.eq(i).attr("href"));
if (!urls.length) {
return;
}
// Send result
message.channel.send(urls[Math.floor(Math.random() * urls.length)]);
});
}
答案 0 :(得分:1)
您可以仅使用消息的内容(不包括前缀)作为查询的字符串。
请注意,如果您不使用命令,则只需运行消息处理程序中的所有内容即可。
bot.on('message', message => {
// Always ignore unwanted messages
if (message.author.bot || !message.startsWith(PREFIX)) return;
let query = message.content.slice(PREFIX.length).trim()
options = {
// Add the query string like this:
url : "https://results.dogpile.com/serp?qc=images&q=" + query + "gif",
...
}
// You can then use your existing code
request(...)
})
答案 1 :(得分:0)
您可以将其用作命令名称,而不是替换'test'
字符串,然后将args
变量用于搜索项,例如:!test <search term>
。为此,您只需要定义args[0]
是命令名称,然后将其余参数连同消息一起传递给test
函数
let args = message.content.slice(PREFIX.length).trim().split(" ");
let commandName = args.shift().toLowerCase(); // Use args[0] as the command name
switch(commandName) {
case 'test':
test(message, args);
break;
}
function test(message, args) {
let [...term] = args;
var options = {
url : "https://results.dogpile.com/serp?qc=images&q=" + term.join(' '),
method: "GET",
headers: {
"Accept": "test/html",
"User-Agent": "Chrome"
}
};
request(options, function(error, response, responseBody) {
if (error) {
return;
}
$ = cheerio.load(responseBody);
var links = $(".image a.link");
var urls = new Array(links.length).fill(0).map((v, i) => links.eq(i).attr("href"));
if (!urls.length) {
return;
}
// Send result
message.channel.send(urls[Math.floor(Math.random() * urls.length)]);
});
}