66
54

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 5 years have passed since last update.

Discord.jsで簡単にbotを作成する【基礎編】

Last updated at Posted at 2018-07-30

##はじめに
最近流行りのDiscord、どうやらNode.jsを使って簡単にbotを作れるらしい...
ということで挑戦。その時のメモ。
##前提

Node.js Ver.9.x以降がインストールされてる事

漢は黙ってインストール

Node.jsインストールコピペ
sudo apt-get update ; sudo apt-get upgrade ; sudo apt-get install -y nodejs npm ; sudo npm cache clean ; sudo npm install n -g ; sudo n stable ; sudo ln -sf /usr/local/bin/node /usr/bin/node

DiscordのAPI Tokenをゲットしておく

DEVELOPER PORTALへ行って "New App" をクリック→"APP NAME" と"APP ICON" を設定して "Create App"をクリックする。
終わったら"Bot"にある "Create a Bot User" でBotユーザーを作る。
"Bot"欄に"Username"と"Token:click to reveal"が表示されるので、"Token:click to reveal"をクリックして、表示されたTokenをメモっておく。
##とりあえず作ってみる

1. App.jsを作ってエディタで開く

(テキストエディタ戦争が起こりそうだけどここはvimで)

touch App.js
vim App.js

2. 以下の内容をコピペ

App.js
//ログイン処理
const Discord = require('discord.js');
const client = new Discord.Client();
const token = 'ここにBotのToken';
client.on('ready', () => {
    console.log('ready...');
});
//Bot自身の発言を無視する呪い
client.on('message', message =>{
    if(message.author.bot){
        return;
   }
//↓ここに後述のコードをコピペする↓

//↑ここに後述のコードをコピペする↑
});
client.login(token);

###3. 基本的なコードを押さえよう

・指定した語句の場合返信する(完全一致)

例;「寒いね」と言った場合に「寒いね」と返信する
寒いねと話しかければ寒いねと答える人のいるあたたかさ

App.js
      if (message.content === '寒いね') {
        let channel = message.channel;
        let author = message.author.username;
        let reply_text = `寒いね`;
        message.reply(reply_text)
            .then(message => console.log(`Sent message: ${reply_text}`))
            .catch(console.error);
        return;
   }

・指定した語句を含む場合返信する(部分一致)

例;「おはよ」を含む場合に「おはようございます!」と返信する

App.js
if (message.content.match(/おはよ/)) {
        let channel = message.channel;
        let author = message.author.username;
        let reply_text =`おはようございます!`;
        message.reply(reply_text)
            .then(message => console.log(`Sent message: ${reply_text}`))
            .catch(console.error);
        return;
    }

・コマンド送信者にメンションを行わずに返信する

上記のコマンドと異なりメンションは行われません!
例;「おはよ」を含む場合に「おはようございます!」と返信する

App.js
if (message.content === 'おはよ') {
//部分一致の場合は if (message.content.match(/おはよ/)) {
message.channel.send(`おはようございます!`)
}

・指定した語句を含む場合投稿を削除する

SPAM対策に有用
例;Discordの招待リンク「discord.gg」を含む場合は削除する

App.js
    if (message.content.match(/discord.gg/)) {
        message.delete(100)
   }

Tips
${author}で発言者の名前を抜き出せます
例;「おはよ」を含む文字を発言した場合、「(発言者)さん、おはようございます!」と発言する

App.js
if (message.content.match(/おはよ/)) {
message.channel.send(`${author}さん、おはようございます!`)
}

4. 実行してみよう

「寒いね」と言われたら「寒いね」と返信して、「discord.gg」を含むワードがある場合は削除するBot

App.js
//ログイン処理
const Discord = require('discord.js');
const client = new Discord.Client();
const token = 'ここにBotのToken';
client.on('ready', () => {
    console.log('ready...');
});
//Bot自身の発言を無視する呪い
client.on('message', message =>{
    if(message.author.bot){
        return;
   }
//↓ここに後述のコードをコピペする↓
   if (message.content === '寒いね') {
        let channel = message.channel;
        let author = message.author.username;
        let reply_text =`寒いね`;
        message.reply(reply_text)
            .then(message => console.log(`Sent message: ${reply_text}`))
            .catch(console.error);
        return;
    }
    if (message.content.match(/discord.gg/)) {
        message.delete(100)
   }
//↑ここに後述のコードをコピペする↑
});
client.login(token);

コードが書けたらとりあえず保存します。
保存できたら以下のコマンドを実行してください

npm install discord.js
node App.js

ready...と表示されたらとりあえずは成功です!
あとはApp.jsをゴニョゴニョ書き換えて自分だけのbotを作ってください。

66
54
1

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
66
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?