Sigmoid_poke's memo

極稀に思ったことを書くだけの場所

discordの役職追加botの作り方メモ(node.js使用)

とりあえずサンプルの動作確認ができたのでメモとして
何のためにHOSTになっているのか分からないし

前提

Windowsしか知りません。
自分が管理者権限を持つDiscordサーバーでやること。

環境

・discordのアカウントを用意する.
・node.jsとdiscord.jsを適当にDL&インストールするだけ。(コマンドプロンプトでnode -vと打ってみてバージョンが出力されれば正しくインストールされています)
・PC版discordが手元にあると動作確認がしやすくて良き。

botの作成

Discord Developer Portalにアクセスして、右上あたりにあるボタンから新しいアプリケーションを作る。
・アプリケーションが作成できたら,それをクリックしてクライアントIDとクライアントシークレットを控える(誰にも見せないこと)。
・アイコンや名前は適宜設定する。
・左のタブからBotを選択し,botを追加しTokenをメモする(これも誰にも見せてはいけない)。
・下のほうにBotの権限を設定する場所があるので,必要な権限にチェックを入れて下に生成された数字をメモ(今回作ったのは考えるのが面倒だから管理者権限(=8)が付与してある)。

botをサーバーに入れる

以下のurlを、「クライアントID」と「権限」を上で求めたクライアントIDと権限にチェックを入れて得た数字に置き換えて踏む
https://discordapp.com/api/oauth2/authorize?client_id=「クライアントID」&permissions=「権限」&scope=bot
ジャンプ後にどのサーバーにbotを導入するかを聞かれるので選択し、権限を確認する。
f:id:poke_3_3_4:20200623151413p:plain
サーバーにbotがやってくるので、discordを開いて確認する。

botが動きやすくなるようにする

よく分からないdiscordの仕様として、ロールの付与等は操作を行う側が操作を行われる側よりも強い権限を持つ必要があるとか何とからしい(有識者の方がいれば教えて下さい)ので、botの地位を上げる。
何かしらの権限を持ったbotにはサーバーに入った段階で専用のロールが付与されているので、discordのサーバー設定からロールを開いて、botの役職を適切な位置まで上昇させる。f:id:poke_3_3_4:20200623152040p:plain

ようやくプログラミング

詳しいことはnode.jsとかでググってもらったほうが早いと思います。そもそも最初からググったほうが(ry
今回サンプルとして書いてみたのがこんな感じ。java scriptの要領なのかな。
トークン」は上でメモしたTokenの値に置き換えて下さい。

const Discord = require('discord.js');
const client = new Discord.Client();

client.on('ready', () => {
   console.log('ログインしました。');
});

client.on('message', message => {
   if (message.content.startsWith('!add slave')) {
        //役職名から役職IDの取得(役職IDをそのまま入力する場合は不要)
	const role = message.guild.roles.cache.find(role => role.name === 'レイドの奴隷');
        //役職の付与(ここでエラーが出る場合は、botの役職の位置が想定よりも下にある可能性があります)
	message.guild.member(message.author.id).roles.add(role);
        //成功した場合にメッセージ送信テストも兼ねて送るメッセージ。
	message.channel.send(message.author.username);
	message.channel.send('Added');

   }
});

client.login('「トークン」');

これを任意の場所に好きな名前で保存する。拡張子は.js。
コマンドを増やすならswitch文とかに変えるべき。
今回は導入したサーバーにレイドの奴隷という役職がある前提で行っていますが、もう少ししっかりとしたものを作るのであれば、対象の役職の有無を確認→無ければ生成とかにしたほうがいいと思います。

実行

コマンドプロンプトを開いて
・「node 」と打つ(スペースを忘れないこと)。
コマンドプロンプトに上で書いたプログラムのファイルをドラッグアンドドロップしてEnterを押す。
コマンドプロンプトに「ログインしました。」と出力されれば起動に成功しています。
・discordを開いて対象のbotがいるサーバーで「!add slave」と打ってみてレイドの奴隷の役職が自分に付与されれば成功です。何も起こらなかった場合はコマンドプロンプトにエラーメッセージが出ていると思うので確認してみてください。
f:id:poke_3_3_4:20200623154028p:plainf:id:poke_3_3_4:20200623153936p:plain