【问题标题】:When checking invites is the following检查邀请时如下
【发布时间】:2019-07-07 13:30:17
【问题描述】:

如果我在机器人开启时创建了一个新的服务器快速邀请,则会发生错误。在其他情况下,它可以工作

const invites = {};
const wait = require('util').promisify(setTimeout);
client.on('ready', () => {
  wait(1000);
    g.fetchInvites().then(guildInvites => {
      invites[g.id] = guildInvites;
    });
  });
});
client.on('guildMemberAdd', member => {
   member.guild.fetchInvites().then(guildInvites => {
     const ei = invites[member.guild.id];
     invites[member.guild.id] = guildInvites;
     const invite = guildInvites.find(i => ei.get(i.code).uses < i.uses);
     const inviter = client.users.get(invite.inviter.id);
     const logChannel = member.guild.channels.find(channel => channel.name === "join-logs");
     logChannel.send(`${member.user.tag} joined using invite code ${invite.code} from ${inviter.tag}. Invite was used ${invite.uses} times since its creation.`);
   });
 });

错误:

2019-07-07T09:49:20.363359+00:00 app[worker.1]: Unhandled Rejection: 
2019-07-07T09:49:20.363377+00:00 app[worker.1]:  TypeError: Cannot read property 'uses' of undefined
2019-07-07T09:49:20.363378+00:00 app[worker.1]:     at guildInvites.find.i (./bot.js:398:57)
2019-07-07T09:49:20.363380+00:00 app[worker.1]:     at Map.find (./node_modules/discord.js/src/util/Collection.js:160:13)
2019-07-07T09:49:20.363381+00:00 app[worker.1]:     at member.guild.fetchInvites.then.guildInvites (./bot.js:398:33)
2019-07-07T09:49:20.363382+00:00 app[worker.1]:     at process._tickCallback (internal/process/next_tick.js:68:7)

398 截止日期

const invite = guildInvites.find(i => ei.get(i.code).uses < i.uses);

【问题讨论】:

  • 我认为你应该控制台日志i.uses 也许它遗漏了什么?你不能总是假设对象包含所有字段,如果你应该更好地控制日志行会邀请
  • 怎么做?可以写代码吗?

标签: javascript node.js message discord discord.js


【解决方案1】:

使用的邀请是新的,尚未在缓存中。但是,ei.get(i.code).uses 假定它存在,并在它不存在时尝试使用它的属性。

这个修改后的谓词函数将返回未缓存的邀请,使用增加的邀请。

const invite = guildInvites.find(i => !ei.get(i.code) || ei.get(i.code).uses < i.uses);

【讨论】:

  • 非常感谢,一切正常!!但有时会报错:TypeError: Cannot read property 'inviter' of null .
  • 引用自文档...“唯一保证的属性是 codeurlguildchannel。其他属性可能会丢失。”将inviter 的声明更改为invite.user || 'an unknown user'。如果已定义,invite.user 将已经返回一个用户,如果未定义,此代码会将变量声明为字符串“未知用户”。
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
相关资源
最近更新 更多