【问题标题】:how do i use bot.on features inside a module.exports file如何在 module.exports 文件中使用 bot.on 功能
【发布时间】:2021-04-23 04:03:13
【问题描述】:

我开发了一种算法,当你在 discord 服务器的文本频道中输入:“-nuke @tag”时,该成员将获得“静音”角色,并且他的 id 将被添加到数组中。如果他离开服务器并重新加入,机器人会将新成员的 id 与数组中的所有 id 进行比较,如果它们匹配,它将自动赋予该人“静音”角色。问题是,bot.on 似乎不能在 index.js 之外的其他东西中工作。我真的不想进入所有的事件处理程序和东西,只是为了让这个工作nuke.js

【问题讨论】:

  • 您可以做的是使用一个全局地图,在其中放置 ID,然后简单地将该地图中的 ID 与传入的 ID 进行比较,然后从那里继续。
  • 我真的不明白我应该怎么做。你有一些代码示例给我看吗?

标签: node.js discord discord.js


【解决方案1】:

这个答案是参考我发表的评论。这将向您展示如何创建和访问全局地图。

首先,您需要通过要使用的地图扩展客户端类。你这样做。

const { Client } = require('discord.js');

module.exports = class extends Client {
    constructor(config) {
        super({});

        this.muteIDs = new Map(); // you can name it whatever you like

        this.config = config;
    }
};

您应该在单独的文件中执行此操作。让我们将该文件称为clientextend.js。现在您可以像往常一样创建您的机器人客户端,但是您需要需要您刚刚创建的文件。此示例在同一目录中同时包含扩展客户端的文件和创建客户端的文件。 注意:在您的示例中,您使用的是 bot 而不是客户端。

const Client = require('./clientextend.js')

const client = new Client();

您现在可以在您可以使用客户端的任何地方访问您创建的地图。你可以这样访问它。

muteIDs = client.muteIDs;

【讨论】:

  • 所以,我试着按照你所说的做,但是当我只是在 index.js“guildMemberAdd”中放置一个 console.log 时,当有人加入时它不会在控制台中输出任何内容
  • 啊,是的,那完全是另一回事。看看this 有没有帮助。
  • 你好!对不起,我没有早点回复,但我有点忙。我设法解决了 guildMemberAdd 问题,但我仍然有一些问题。我的变量名是“nukedids”,每当我在索引文件中调用它时,我都会收到错误:“TypeError:nukedids 不是函数”,即使我在索引文件的开头键入了 nukedids = bot.nukedids。是的,我在 index 和 nuke.js 文件中为客户端扩展输入了 const Client = require(...),但它仍然无法在 index.js 中的 guildMemberAdd 中工作 code
  • 您好像没有正确使用它。确保正确启动客户端。您的客户是bot。如果您想在nuke.js 中使用客户端,那么您需要将其传递给您的命令处理程序或以您可以从任何地方访问它的方式对其进行初始化。另请记住,map 不是数组。
  • 我想我让它工作了,问题是 id 本身。我在 guildMemberAdd 中获得的 id 与我在 nuke.js 中获得的不同:guildmemberadd 中的代码:member.guild.id;,nuke.js:const member = message.mentions.members.first(); ..... member.id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2017-11-28
  • 1970-01-01
相关资源
最近更新 更多