使用TypeScript在Discord Bot启动/按计划发送消息

时间:2019-05-04 00:02:27

标签: typescript discord.js

嗨,所以我一直在用TypeScript构建一个Discord Bot,供我自己和一群朋友使用。我正在尝试在准备就绪的客户端上发送一条消息,该消息完全独立于用户与机器人进行的任何交互(消息,错误,登录等),因此我希望消息在客户端准备好后立即发送。 / p>

我已经看到一些有关在客户端准备就绪和调度上发送消息的解决方案(discord.js send scheduled message),所以这不是问题,但是这些解决方案的主要问题是discord.js类型的GuildChannels({ {3}})实际上不包含send方法,除非它的类型为TextChannel(https://discord.js.org/#/docs/main/stable/class/GuildChannel)。但是,由client.channels.get(channelId)给出的类型将返回GuildChannel(可能是文本类型)。

所以我的代码示例如下:

import { Client } from 'discord.js';

import { BOT_SECRET_TOKEN, FOX_GUILD_ID, FOXBOT_CHANNEL } from './secret.json';

const client = new Client();

client.on('ready', () => {
  console.log(`Connected as ${client.user.tag}`);

  const foxGuild = client.guilds.get(FOX_GUILD_ID);
  if (!foxGuild) {
    console.log('Guild not found');

    return;
  }

  const foxbotChannel = foxGuild.channels.get(FOXBOT_CHANNEL);
  if (!foxbotChannel) {
    console.log('Channel not found');

    return;
  }

  foxbotChannel.message('I am ready for service!');
});

  foxbotChannel.message('I am ready for service!');

会给我这个错误

src/index.ts(26,17): error TS2339: Property 'message' does not exist on type 'GuildChannel'.

我也曾尝试导入TextChannel并像这样启动foxbotChannel

foxbotChannel: TextChannel = foxGuild.channels.get(FOXBOT_CHANNEL);

但是还会收到一条错误消息,指出GuildChannel类型缺少许多属性。

所以我的问题是,如何将GuildChannel转换为TextChannel,以便能够通过该通道发送消息,或者如何通过客户端找到TextChannel?

2 个答案:

答案 0 :(得分:0)

课程

def current_step?(step_key) current_step == step_key.to_s end 类扩展了TextChannel类,扩展了GuildChannel,这意味着您可以将它们视为子类:Channel ==> Channel ==> GuildChannel

适用于TextChannel的所有内容都适用于Channel,适用于GuildChannel的所有内容都适用于GuildChannel,以及为每个列表列出的其他属性和方法。 / p>

更新:要获得正确的类型(TextChannel,可以使用this solution中所示的TypeGuard。


属性“消息”不存在

TextChannel是无效的方法。使用message(),如下所示:

send()

答案 1 :(得分:0)

或者你可以使用这样的 id 查找频道

我们找到服务器和频道后发送消息

client.guilds.cache.find(guild => guild.id === 'your serveur id here')
  .channels.cache.find(channel => channel.id === 'the channel id here')
  .send('bot on')

如需更多帮助,请加入我的不和谐:https://discord.gg/eJYgEMFW2b

client.guilds.cache.find(guild => guild.id === 'your serveur id here')
  .channels.cache.find(channel => channel.id === 'the channel id here')
  .send('bot on')