1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Discord.jsを使用したBotで指定のチャンネルにメッセージを送信する

Last updated at Posted at 2021-11-14

はじめに

DiscordBotを作った

discord.jsがv13にアップデートされて日本語文献が大幅に減少し、初学者的にはむちゃくちゃ沼ったのでメモ
TypeScriptを採用した(生まれて初めてみた親の顔がTypeScriptなので使ってる)辛さも含まれてる

ボタンとか実装できるようになったのは嬉しい

※イベントで使う用のbotで作成期間が徹夜前提でタイムリミットが8時間とかしかなかったのもあり、とりあえず動けば良い時用の知識になってるので、他の良い記述方法あったら教えてください

目次

  1. 環境構築
  2. dotenvのインポート
  3. clientの記述
  4. 指定のチャンネルにメッセージを送信する
  5. 参考文献

#1. 環境構築

雑にTypeScriptの環境構築

npm install discord.js
npm install dotenv
npm install typescript --save-dev
npm install --save-dev eslint
npx tsc --init

前回作った(半年前)のBotのコードをコピペしたらエラーの嵐
特に、Node.jsのバージョンが低いことに起因するエラーで30分くらい悩んだ
Node.js 16.6.0が必要だと公式ドキュメントに書いてあるのでちゃんと読むべき…

動いた環境

node -v 
v16.13.0

npm -v
7.24.0

.gitignoreを先に書く癖をつける
.envファイルやnode_modulesをGitHubに公開するをやらかす

.gitignore
node_modules/
/.env
/src/.js

#2. dotenvのインポート

Before

import dotenv from "dotenv";
dotenv.config();

動かなかったので

After

import * as dotenv from "dotenv";
dotenv.config();

追記

起動時オプションでも設定できるし、以下の記述でも動くらしいです。

import { config } from 'dotenv';
config();

#3. clientの記述

const client = new Client({
  intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES],
});

discord.js v12と書き方が大幅変わってた
メッセージを送るためにはIntents.FLAGS.GUILD_MESSAGESが必要

#4. 指定のチャンネルにメッセージを送信する

本題

初学者が理解しやすい記事はオウム返しが主流で、他のチャンネルに送信する文献が少なかった

const postchannel = client.channels.cache.get(channel_id);
postchannel.send("");

でいけるとdiscord.jsのDiscordコミュニティでは言われていたが、そもそもclient.channels.cache.get(channel_id)以下にsendが生えてなさそうなので困った

1時間強くらいネットの海を彷徨った結果、stackoverflowで解決策を見つけることができた

import { TextChannel } from "discord.js";
const postchannel = client.channels.cache.get(channel_id) as TextChannel;
postchannel.send({ embeds: [goalEmbed] });

#5. 参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?