Discordサーバー、sanchezyspace管理用Bot
-
開発用Discord Botを新たに作成、トークンを取得、サーバーに招待 アプリ、bot名は両方
spacecruiser-dev-chelluoxou
みたいな感じで、spacecruiser-dev
から必ずはじまるようにして、誰が開発しているBotなのかわかるようにしてください -
Notionのトークンを取得(dev今のところないです 開発チャンネルにprodあります)
-
.env.development
を以下のように記述DISCORD_TOKEN = {開発用botのトークン} DISCORD_CLIENT_ID = {開発用BotのクライアントID} DISCORD_GUILD_ID = {稼働サーバーID} DISCORD_PROJECT_CATEGORY_ID = {プロジェクトチャンネルカテゴリのID} DISCORD_PROJECTS_CHANNEL_ID = {プロジェクト一覧チャンネルのID} NOTION_TOKEN = {notionのトークン} NOTION_PROJECTS_DATABASE_ID = {projectsデータベースのID}
NotionのトークンとかDiscordサーバーのチャンネルIDとか、足りない情報は開発チャンネルに載ってます
-
パッケージのインストール
$ npm install
-
開発用Botにコマンドをデプロイ (Discord上でのコマンド入力仕様に関する変更があるたびに実行が必要)
$ npm run deploy-commands:dev
-
実行 (コマンドの処理部分、その他コードの変更時はこれだけでOK)
$ npm run dev
src/interactions
にあるコマンドをDiscordサーバーにデプロイ$ npm run deploy-commands:dev
- ビルドと実行
$ npm run dev
- ビルドと実行(watchモード)
$ npm run dev:watch
develop
ブランチから開発ブランチを切る- 開発する
develop
ブランチにPR出す
develop
ブランチに勝手にマージしたらだめだし直接pushしないことkoto- 当然、
main
ブランチにも勝手にマージしたらだめだだし直接pushしないこと
-
コマンドのスクリプトを作成 TypeScriptで書きたい人は
.ts
を作ってください。 スラッシュコマンドの場合:$ touch src/interactions/chat-input-command/{command-name}.js
コンテクストメニューの場合:
$ touch src/interactions/context-menu-command/{command-name}.js
-
テンプレートをコピペ スラッシュコマンドの場合 (JavaScript):
import { SlashCommandBuilder } from 'discord.js'; export default { data: new SlashCommandBuilder() .setName('new-command') .setDescription('spacecruiser replies with wubba lubba dub-dub!'), execute: async (interaction) => { if (interaction.isChatInputCommand()) { interaction.reply('Wubba Lubba dub-dub'); } }, };
スラッシュコマンドの場合 (TypeScript):
import { ChatInputCommandInteraction, SlashCommandBuilder } from 'discord.js'; export default { data: new SlashCommandBuilder() .setName('new-command') .setDescription('spacecruiser replies with wubba lubba dub-dub!'), execute: async (interaction: ChatInputCommandInteraction) => { interaction.reply('Wubba Lubba dub-dub'); }, };
メッセージコンテキストメニューの場合 (JavaScript):
import { ApplicationCommandType, ContextMenuCommandBuilder } from 'discord.js' export default { data: new ContextMenuCommandBuilder() .setName('New Command') .setType(ApplicationCommandType.Message), execute: async (interaction) => { if (interaction.isMessageContextMenuCommand()) { interaction.reply('Wubba Lubba dub-dub') } }, }
メッセージコンテキストメニューの場合 (TypeScript):
import { ApplicationCommandType, ContextMenuCommandBuilder, MessageContextMenuCommandInteraction, } from 'discord.js' export default { data: new ContextMenuCommandBuilder() .setName('New Command') .setType(ApplicationCommandType.Message), execute: async (interaction: MessageContextMenuCommandInteraction) => { interaction.reply('Wubba Lubba dub-dub') }, }
-
開発用Botにコマンドをデプロイ
$ npm run deploy-commands:dev
-
Discord JS Japan - やりたいこと逆引き集、サンプルプログラム 日本語でサクサク読める。サンプルだけで30個あるし、これは見るだけでなんとなく雰囲気掴めると思います。ただし、逆引きサンプルとかクラスの説明自体はドキュメントよりもシンプルな書かれ方をしてる。ある程度わかってる人向け。
-
【Javascriptで作成する】Discordのbotの作り方 Discord.js v14 Discord.js v14でBotを作る方法をイチから説明してくれてる。文量多め。丁寧。
-
公式ドキュメント old.discordjs.dev 型定義、関数、クラスに関するドキュメントはこっち
-
公式ドキュメント discordjs.guide 導入ガイドや、逆引き集、チュートリアルなどはこっち。
覚書です 基本的に勝手にやらないで
-
.env.production
を以下のように記述DISCORD_TOKEN = {本番用botのトークン} DISCORD_CLIENT_ID = {本番用BotのクライアントID} DISCORD_GUILD_ID = {稼働サーバーID} DISCORD_PROJECT_CATEGORY_ID = {プロジェクトチャンネルカテゴリのID} DISCORD_PROJECTS_CHANNEL_ID = {プロジェクト一覧チャンネルのID} NOTION_TOKEN = {notionのトークン} NOTION_PROJECTS_DATABASE_ID = {projectsデータベースのID}
-
本番環境としてコマンドをデプロイ
$ npm run deploy-commands:prod
-
開発用Botがデプロイしていたコマンドをクリーンアップ
$ npm run delete-commands:dev
-
developブランチにマージ
-
Railwayへの自動デプロイを確認
-
Discord.js v14
-
Notion API
-
dotenv
-
TypeScript
-
Yargs
-
ESLint
-
Prettier
-
husky