当前位置: 首页 > 知识库问答 >
问题:

有不同的欢迎渠道

赵嘉赐
2023-03-14

我需要我的discord机器人记住在不同的行会中向哪个频道发送问候。目前,我将频道名称作为前缀,并使用它来回忆发送到何处:

//greeting new users script
bot.on('guildMemberAdd', member => {
  // Send the message to a designated channel on a server:
  const WelcomeChannel = member.guild.channels.cache.find(ch => ch.name === config.WelcomeChannelVar);
  // Do nothing if the channel wasn't found on this server
  if (!WelcomeChannel) return;
  const welcomeEmbed = new Discord.MessageEmbed()
    .setAuthor(member.displayName.toString() + '#' + member.user.discriminator, member.user.displayAvatarURL())
    .setTitle('someone joined!')
    .setDescription('welcome to **' + member.guild.name + '**, <@' + member.id + '> !')
    .setColor(0x348a58)
    .setThumbnail(member.user.avatarURL())
    .setFooter('you\'re member #' + member.guild.memberCount + '!')
  setTimeout(() => {
    WelcomeChannel.send(welcomeEmbed)
  }, 200);

  member.send("welcome to " + member.guild.name + "! please **read the rules**, and *follow them* :) if you need any help, please **ping a staff member**.");
});

我如何设置一个命令,当机器人加入他们的公会时,所有者可以使用该命令,为每个公会设置一个唯一的欢迎通道(并且显然只向加入公会的人发送欢迎消息)。

哦,我如何设置一个命令,最终让人们改变他们公会的欢迎信息?

谢谢!:)

共有1个答案

樊胜
2023-03-14

你需要有一个文件来存储每个公会的欢迎频道ID,这样你以后就可以检查它们了。您可以使用JSON文件:

// Define it one time
const welcomeChannels = require('./path/to/your/file.json')

// When you want to set the channel for a guild
welcomeChannels[guild.id] = channel.id
fs.writeFileSync('./path/to/your/file.json', JSON.stringify(welcomeChannels))

// When you need to read a property
let welcomeChannelID = welcomeChannels[guild.id]

您可以使用一个变量来存储对象,该对象被保存到一个文件中,您可以使用fs.writeFileSync更新该文件。
gudMemberAdd处理程序中,您可以从新成员那里获取行会id然后用它来获取通道ID:

bot.on('guildMemberAdd', member => {
  let id = welcomeChannels[member.guild.id]
  let welcomeChannel = member.guild.channels.cache.get(id)

  // The rest is the same as in your code
})

在主文件中,您只需要第一次需要它,并在guildMemberAdd处理程序中使用它。

// main file

const welcomeChannels = require('./path/to/your/file.json')

bot.on('guildMemberAdd', member => {
  let id = welcomeChannels[member.guild.id]
  let welcomeChannel = member.guild.channels.cache.get(id)

  // The rest is the same as in your code
})

对于命令来说,它实际上取决于您的命令系统:您需要找到一种跨文件共享欢迎频道变量的方法,这通常是通过导入/导出来完成的。这里有一个关于如何设置新值的模拟函数。

// command file

function setId(guildID, channelID) {
  welcomeChannels[guild.id] = channel.id
  fs.writeFileSync('./path/to/your/file.json', JSON.stringify(welcomeChannels))
}
 类似资料:
  • 该站点的目标是成为 Jekyll 的全面指南。包括一些内容如:搭建和运行你的站点、创建以及管理内容、定制站点的展现和外观、在不同的环境中发布、以及参与到 Jekyll 将来的开发的一些建议。 Jekyll 究竟是什么? Jekyll 是一个简单的博客形态的静态站点生产机器。它有一个模版目录,其中包含原始文本格式的文档,通过一个转换器(如 Markdown)和我们的 Liquid 渲染器转化成一个完

  • 欢迎来到 Libra 开发者站点! Libra 的使命是建立一套简单的全球货币和金融基础设施,为数十亿人服务。 The world truly needs a reliable digital currency and infrastructure that together can deliver on the promise of “the internet of money.” Securi

  • Web 应用程序开发人员可以在 Web 应用程序部署描述文件中定义一个称为欢迎文件的局部 URI 有序列表。在 Web 应用程序部署描述文件模式中描述了部署描述文件中欢迎文件列表的语法。 这种机制的目的是,当一个对应到 WAR文件中一个目录条目的请求 URI没有映射到一个 Web 组件时,允许部署者为容器用于添加 URI 指定局部URI 有序列表。这种请求被认为是有效的局部请求。 通过下面常见的例

  • 当你开始 Navicat Data Modeler,一个欢迎窗口会弹出,你可以选择创建一个新模型、打开一个现有的模型等。在登录 Navicat Cloud 后,欢迎窗口会分为两部份:“我的 Mac 上”和“Navicat Cloud”。你可以在本机电脑和 Navicat Cloud 访问或保存模型。 创建一个新模型 在欢迎窗口中点击“新建模型”。 选择模型类型和其他设置。 从数据库创建一个新模型

  • 当你开始 Navicat Data Modeler,一个欢迎窗口会弹出,你可以选择创建一个新模型、打开一个现有的模型等。在登录 Navicat Cloud 后,欢迎窗口会分为两部份:“本机”和“Cloud”。你可以在本机电脑和 Navicat Cloud 访问或保存模型。 创建一个新模型 在欢迎窗口中点击“新建模型”。 选择模型类型和其他设置。 从数据库创建一个新模型 选择“工具”->“从数据库导

  • 如何防止机器人连续两次发送相同的欢迎消息?我认为这与定义服务器消息意图有关。 client.on: 客户频道。隐藏物获取('channelID')。发送(“欢迎”);