Discord.js没有将数据写入.json文件 [英] Discord.js not writing data to .json file

查看:92
本文介绍了Discord.js没有将数据写入.json文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的ban命令,我试图导出代码以在命令处理程序中工作。 iv对此命令有很多问题,但最终我几乎可以正常工作。该代码可以正常运行,直到应将其写入.json文件为止(我更改了.json目录以确保已找到它,并且抛出错误,因此上一行代码肯定正在运行,并且找到了。 json)。任何帮助将不胜感激,谢谢

This is my ban command, im trying to export the code to work within a command handler. Iv had numerous issues with this command but eventually i have almost everything working. The code runs perfectly until the point where it should write to .json file (I changed the .json directory to make sure it was being found, and it threw an error so the previous line of code is definitely running, and its finding the .json). Any help would be greatly appreciated, thank you

我也尝试过替换此行

let bannedIDs = require('../../bannedIDs.json').ids || []

with

let file = fs.readFileSync('../../bannedIDs.json')
let bannedIDs = JSON.parse(file).ids || []

仍然不会将任何数据写入.json

still results in no data being written to the .json

const { RichEmbed } = require("discord.js");
const fs = require('fs');

module.exports = {
  config: {
    name: "ban",
    description: "Bans a user from the guild!",
    usage: "!ban",
    category: "moderation",
    accessableby: "Administrators",
    aliases: ["b", "banish", "remove"]
  },
  run: async (bot, message, args) => {

    if (!message.member.hasPermission(["BAN_MEMBERS", "ADMINISTRATOR"])) return message.channel.send("You do not have permission to perform this command!");

    const user1 = message.mentions.users.first();
    let member = message.mentions.members.first();


    if (member) {

      const member = message.mentions.members.first();

      let reason = args.slice(2).join(' ');
      var user = message.mentions.users.first();

      member.ban({ reason: `${args.slice(2).join(' ')}` }).then(() => {
        let uEmbed = new RichEmbed()
          .setTitle('**' + `Sucessfully Banned ${user1.tag}!` + '**')
          .setThumbnail('https://i.gyazo.com/8988806671312f358509cf0fd69341006.jpg')
          .setImage('https://media3.giphy.com/media/H99r2HtnYs492/giphy.gif?cid=ecf05e47db8ad81dd0dbb6b132bb551add0955f9b92ba021&rid=giphy.gif')
          .setColor(0x320b52)
          .setTimestamp()
          .setFooter('Requested by ' + message.author.tag, 'https://i.gyazo.com/8988806671312f358509cf0fd69341006.jpg');
        message.channel.send(uEmbed);

      }).catch(err => {
        message.channel.send('I was unable to kick the member');
        console.log(err);
      });
    } else {
      const PREFIX = '!';

      let args = message.content.substring(PREFIX.length).split(" ");

      let user = message.mentions.users.first(),
        userID = user ? user.id : args[1];

      if (isNaN(args[1])) return message.channel.send("You need to enter a vlaid @Member or UserID #");

      if (args[1].length <= 17 || args[1].length >= 19) return message.channel.send("UserID # must be 18 Digits");

      if (userID) {
        let bannedIDs = require('../../bannedIDs.json').ids || [];

        if (!bannedIDs.includes(userID)) bannedIDs.push(userID);

        fs.writeFileSync('../../bannedIDs.json', JSON.stringify({ ids: bannedIDs }));
        let reason = args.slice(2).join(' ');

        let uEmbed = new RichEmbed()
          .setTitle('**' + `UserID #${args[1]}\n Will be Banned on Return!` + '**')
          .setThumbnail('https://i.gyazo.com/8988806671312f358509cf0fd69341006.jpg')
          .setImage('https://i.imgur.com/6Sh8csf.gif')
          .setColor(0x320b52)
          .setTimestamp()
          .setFooter('Requested by ' + message.author.tag, 'https://i.gyazo.com/8988806671312f358509cf0fd69341006.jpg');
        message.channel.send(uEmbed);
        let reason1 = args.slice(2).join(' ');
      } else {
        message.channel.send('Error');
      }
    }
  }

};


推荐答案

要求('../../bannedIDs.json').ids || [] 我猜这为什么不起作用是因为,如果 require(...)不存在,您就不会能够访问 .id ,这在js中很常见,您通常只需执行 obj&& obj.property 或与babel obj?.property

require('../../bannedIDs.json').ids || [] I'm guessing why this doesn't work is because if require(...) doesn't exist, you wouldn't be able to access .id, this is a common thing in js which you can usually just do obj && obj.property or with babel obj?.property

这是我个人的方式会做到

This is personally how I would do it

let file = require('../../bannedIDs.json') || { ids: [userID] };
const bannedIDs = file.bannedIDs;

if (!bannedIDs.includes(userID)) bannedIDs.push(userID);

fs.writeFile('../../bannedIDs.json', JSON.stringify(file));

您也可以这样做

const collection = await <Guild>.fetchBans();
const ids = collection.map(e => e.user.id).array();

要获取被禁止的用户或ID列表

To get a list of banned users or Ids

这篇关于Discord.js没有将数据写入.json文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆