Skip to content

sanchezyspace/com-spacecruiser

Repository files navigation

spacecruiser

HEADER IMAGE Discordサーバー、sanchezyspace管理用Bot

環境構築

  1. 開発用Discord Botを新たに作成、トークンを取得、サーバーに招待 アプリ、bot名は両方spacecruiser-dev-chelluoxouみたいな感じで、spacecruiser-devから必ずはじまるようにして、誰が開発しているBotなのかわかるようにしてください

  2. Notionのトークンを取得(dev今のところないです 開発チャンネルにprodあります)

  3. .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とか、足りない情報は開発チャンネルに載ってます

  4. パッケージのインストール

    $ npm install
  5. 開発用Botにコマンドをデプロイ (Discord上でのコマンド入力仕様に関する変更があるたびに実行が必要)

    $ npm run deploy-commands:dev
  6. 実行 (コマンドの処理部分、その他コードの変更時はこれだけでOK)

    $ npm run dev

npmスクリプトの使い方

  • src/interactionsにあるコマンドをDiscordサーバーにデプロイ
    $ npm run deploy-commands:dev 
  • ビルドと実行
    $ npm run dev
  • ビルドと実行(watchモード)
    $ npm run dev:watch

contribution

  1. developブランチから開発ブランチを切る
  2. 開発する
  3. developブランチにPR出す
  • developブランチに勝手にマージしたらだめだし直接pushしないことkoto
  • 当然、mainブランチにも勝手にマージしたらだめだだし直接pushしないこと

開発tips

サーバーで使えるコマンドの追加方法

  1. コマンドのスクリプトを作成 TypeScriptで書きたい人は .tsを作ってください。 スラッシュコマンドの場合:

    $ touch src/interactions/chat-input-command/{command-name}.js

    コンテクストメニューの場合:

    $ touch src/interactions/context-menu-command/{command-name}.js
  2. テンプレートをコピペ スラッシュコマンドの場合 (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')
      },
    }
  3. 開発用Botにコマンドをデプロイ

    $ npm run deploy-commands:dev

便利なリンク

production環境へのデプロイ

覚書です 基本的に勝手にやらないで

  1. .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}
    
  2. 本番環境としてコマンドをデプロイ

    $ npm run deploy-commands:prod
  3. 開発用Botがデプロイしていたコマンドをクリーンアップ

    $ npm run delete-commands:dev
  4. developブランチにマージ

  5. Railwayへの自動デプロイを確認

使用ライブラリなど

  • Discord.js v14

  • Notion API

  • dotenv

  • TypeScript

  • Yargs

  • ESLint

  • Prettier

  • husky

招待

公開用Botを招待する

About

コミュニティ管理 Discord Bot

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published