LoginSignup
3
3

More than 1 year has passed since last update.

Discord BOTを特定チャンネルで呼びかけると反応するようにするメモ

Last updated at Posted at 2021-05-03

久々にDiscrod BOTを触ってみてます。なんか前にも同じようなメモ書いた気もしてる...

スクリーンショット 2021-05-03 18.03.37.png

こんな感じにユーザーが発言したチャンネルによって処理のハンドリングをさせたいってメモです。

基本

自分用おさらいとしてメモ残しておきます。

Discord.jsのトップページのサンプルと一緒ですが、 サンプルの方はパッと見トークンをどこに入れれば良いのか分からないので注意。

Discrod.js

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

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on('message', msg => {
  if (msg.content === 'ping') {
    msg.reply('Pong!');
  }
});

client.login(`アクセストークン`);

client.login()の箇所に取得したアクセストークンを指定して起動すればOKです。

Webhook URLなど指定せずにローカルで試せます。

まずはこれでping/pongを試せます。

チャンネルの取得をしてハンドリング

msg.channel.idでチャンネルのIDを指定するか、msg.channel.nameでチャンネル名を指定するかが良さそうです。

チャンネルIDの場合

チャンネルIDでハンドリングしたい場合はmsg.channel.idを利用します。

Discordのチャンネルを開いてる時のURLは以下のような形式です。

https://discord.com/channels/XXXXXX/YYYYYY

このXXXXXXXの部分がサーバーごとのIDになり、YYYYYYの部分がチャンネルごとのIDになります。

ちなみにDMの場合は以下のような形式になります。

https://discord.com/channels/@me/YYYYYY

URLの最後のYYYYYYがチャンネルIDになるので以下のようにハンドリング出来ます。

//省略

//特定の部屋での発言
if(msg.channel.id === 'YYYYYY'){
  msg.channel.send('今日の会議の議事録はこちらです! https://hogehoge.com');
}

//それ以外の部屋では反応しない
else{
  msg.reply('この部屋で設定されている会議はありません。');
}

//省略

チャンネル名の場合

チャンネル名でハンドリングしたい場合はmsg.channel.nameを利用します。

スクリーンショット 2021-05-03 18.21.16.png

↑のように表示されてる名前です。ただ、この場合名前が合ってればという判定なので、運用で部屋の名前を変更した際などに想定している動作にならなくなるので注意が必要そうです。

//省略

//特定の部屋での発言
if(msg.channel.name === 'n0bi-playground'){
  msg.channel.send('今日の会議の議事録はこちらです! https://hogehoge.com');
}

//それ以外の部屋では反応しない
else{
  msg.reply('この部屋で設定されている会議はありません。');
}

//省略

コード全体

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

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on('message', msg => {
  if (msg.content === 'ping') {
    msg.reply('Pong!');
  }

  if(msg.content === '会議URL教えて'){
    if(msg.channel.id === 'YYYYYY'){
      msg.channel.send('https://hogehoge.com/hugahuga');
    }else{
      msg.reply('現在の部屋では設定されてるURLがありません。');
    }
  }

});

client.login(`アクセストークン`);

補足: 発言させるmsg.channel.sendmsg.reply

どっちもBOTを発言させるときですが、以下の違いがあります。

  • msg.channel.sendを使うとそのチャンネルでBOTが発言

スクリーンショット 2021-05-03 18.58.25.png

  • msg.replyで発言者にリプライ付きでBOTが返信

スクリーンショット 2021-05-03 18.57.10.png

3
3
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
3
3