如何发送随机图像?

时间:2018-12-01 20:42:05

标签: discord.js

当有人说toggledoggo时,我正在尝试发布随机的狗图片。每次我尝试运行该命令时,它都会在终端中显示一条错误消息,并且不执行任何操作。

这是我的代码:

const Discord = require('discord.js');
const client = new Discord.Client();

client.on("message", message => {
  var prefix = 'toggle';
  var doggos = ['dog1', 'dog2'];
  var dog1 = message.channel.send({ files: ['dog1.jpg'] });
  var dog2 = message.channel.send({ files: ['dog2.jpg'] });
  if (message.content.startsWith(prefix + 'doggo')) {
    Math.floor(Math.random() * doggos.length);
  };
});

client.login('token');

1 个答案:

答案 0 :(得分:0)

如果您想要真正随机的图片(伪随机但仍然),请使用api。我用dog.ceo。这是一个代码,虽然很大,但为用户提供了很多选择。

if(msg.split(' ')[0] === prefix + "doggo"){
    let breeds = []; // Initializing an array to use later
    let breeds2 = []; // Due to the size, we need to split it.
    request('https://dog.ceo/api/breeds/list/all', async function (error, response, body) { // Begin a request to list all breeds.
        if (!error && response.statusCode == 200) {
            var importedJSON = JSON.parse(body);
            for(var name in importedJSON.message){ // looping through every breed and pushing it into the array made earlier
                breeds.push(name)
                if(importedJSON.message[name].length != 0){
                    for(var i = 0; i < importedJSON.message[name].length; i++){
                        breeds.push("- " + importedJSON.message[name][i]) // Pushing sub-breeds into the array too
                    }
                }
            }
            for(var j = 0; j < breeds.length/2; j++){ // Halving the previous array because it's too big for one message.
                let toArray = breeds.shift()
                breeds2.push(toArray)
            }
        }
    })
    let args = msg.split(' ').slice(1)
    if(!args[0]){ // if no breed, then send a random image
        request('https://dog.ceo/api/breeds/image/random', async function (error, response, body) {
            if (!error && response.statusCode == 200) {
                    var importedJSON = JSON.parse(body);
                return await message.channel.send(importedJSON.message)
            }
        })
    }
    if(args[0] === "breeds"){ // Command to list the breeds.
        setTimeout(async function(){
            let m = breeds2.map(name => name.charAt(0).toUpperCase() + name.slice(1)) // Creating a map of the arrays earlier to send as a message
            let m2 = breeds.map(name => name.charAt(0).toUpperCase() + name.slice(1))
            await message.channel.send(m)
            return await message.channel.send(m2)
        }, 1000);
    }
    if(args[0]){
        setTimeout(async function(){
            for(var i = 0; i < breeds.length; i++){ // Looping through every breed in the array to see if it matches the input
                if(args[0] == breeds[i]){ 
                    let input = breeds[i]
                    args.shift() // This is to check for a sub breed input, which is taken into account in the else statement of this if statement
                    if(!args[0] || args[0] == undefined){
                        request(`https://dog.ceo/api/breed/${input}/images/random`, async function (error, response, body) {
                            if (!error && response.statusCode == 200) {
                                var importedJSON = JSON.parse(body);
                                return await message.channel.send(importedJSON.message)
                            }else{
                                await message.channel.send(`You must have typed something wrong, do ${prefix}doggo breeds for a list of breeds.`)
                                return
                            }
                        })
                        return
                    }else{
                        request(`https://dog.ceo/api/breed/${input}/${args[0]}/images/random`, async function (error, response, body) { // requesting a dog of a certain breed and sub breed
                            if (!error && response.statusCode == 200) {
                                var importedJSON = JSON.parse(body);
                                return await message.channel.send(importedJSON.message)
                            }else{
                                await message.channel.send(`You must have typed something wrong, do ${prefix}doggo breeds for a list of breeds.`)
                                return
                            }
                        })
                        return
                    }
                }
            }
            for(var i = 0; i < breeds2.length; i++){ // This is identical to the above, but with the other array
                if(args[0] == breeds2[i]){
                    let input = breeds2[i]
                    args.shift()
                    if(!args[0] || args[0] == undefined){
                        request(`https://dog.ceo/api/breed/${input}/images/random`, async function (error, response, body) {
                            if (!error && response.statusCode == 200) {
                                var importedJSON = JSON.parse(body);
                                return await message.channel.send(importedJSON.message)
                            }else{
                                await message.channel.send(`You must have typed something wrong, do ${prefix}doggo breeds for a list of breeds.`)
                                return
                            }
                        })
                        return
                    }else{
                        request(`https://dog.ceo/api/breed/${input}/${args[0]}/images/random`, async function (error, response, body) {
                            if (!error && response.statusCode == 200) {
                                var importedJSON = JSON.parse(body);
                                return await message.channel.send(importedJSON.message)
                            }else{
                                await message.channel.send(`You must have typed something wrong, do ${prefix}doggo breeds for a list of breeds.`)
                                return
                            }
                        })
                        return
                    }
                }
            }
        }, 1000);
    }
};

对此可接受的命令是:(前缀)doggo,(前缀)doggo品种,(前缀)doggo(品种),(前缀)doggo(品种)(子品种) 您将需要“请求”模块,您可以在这里阅读它:https://www.npmjs.com/package/request。希望我在代码中添加的注释足以解释如果没有发生的情况,请澄清。如果您只想要一个用于显示2张图片的小命令,那么您也可以告诉我,我将彻底删除此帖子。