質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

4111閲覧

Bot(Dscord.js)を用いVC接続者全員にコメントを送る

haruki_no_Ki

総合スコア4

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/03/21 11:21

前提・実現したいこと

Discordで使用するBotをJavascriptを用い作成しています。
使用する武器をランダムで選択するBotを作ったのですが
それを今回ボイスチャンネルに接続しているユーザー全てに対して行いたいと考えているのですが
初心者でどのように組めば良いのか検索してもわからず質問させて頂きます。

現在環境

ボイスチャンネルにユーザーA,B,C,Dが接続(接続していなくても可)
ユーザー(誰でも)が[武器]とコメント→Botが反応しコメントしたユーザーに対し武器の名称をコメントする

実現したい環境

ボイスチャンネルにユーザーA,B,C,Dが接続(接続している場合にのみ反応)
ユーザー(誰でも)が[武器VC]とコメント→Botが反応しボイスチャンネルに接続しているユーザー全員に対し武器の名称をコメントする
誰も接続していない場合はその旨をコメントする。
※全員が同じ事をしないといけないのを改善したいです

■現在使用しているコード(discord.js)は下記になります。

// Response for Uptime Robot
const http = require('http');
http.createServer(function(request, response)
{
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Discord bot is active now \n');
}).listen(3000);

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

client.on('ready', message =>
{
client.user.setPresence({ game: { name: 'with discord.js' } });
console.log('bot is ready!');
});

client.on('message', message =>
{
if(message.isMemberMentioned(client.user) && message.author != client.user)
{
message.reply( ' \n 何をしますか? \n 操作方法がわからない場合は『使い方』と打って下さい。' );
return;
}

if (message.content === '使い方') {
let channel = message.channel;
let author = message.author.username;
message.reply( '\n 説明文を後ほど追記

if (message.content === '武器') {
const channel = message.channel;
const author = message.author.username;
const texts = [
"素手",
"ナイフ",
"剣",
"槍"
];

// 上記をランダムで選択 const replyText = texts[Math.floor(Math.random() * texts.length)]; message.reply(replyText).catch(console.error);

その他

試したこと調べながら何となく下記を追加で書いたのですが間の部分がわからず動きません。
(ボイスチャンネルに接続していてもelse 以降が反応してしまいます。)

if (message.content === '武器VC') {
if (message.isMemberMentioned(client.user) && message.member.voiceChannel)
{
// ボイスチャンネルに人がいる場合の処理
message.member.voiceChannel

↑↑↑↑↑この部分がわかっていない?↓↓↓↓↓

const channel = message.channel; const author = message.author.username;

const texts = [
"素手",
"ナイフ",
"剣",
"槍"   
];

// 上記をランダムで選択 const replyText = texts[Math.floor(Math.random() * texts.length)]; message.reply(replyText).catch(console.error); } else { /* ボイスチャンネルにいないときの処理 */ message.reply( '\n ボイスチャンネルに接続してから行って下さい...。' ); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

discord.jsのバージョンがv11という前提で話をさせていただきます。

取り合えず「武器VCと打った人がVoiceチャンネル内にいるかを判定する」 これは
メンバーがvcに入っているとそのチャンネルのid等が取れます。
逆に入っていない場合は、undefined又はnullが返ります。
よって条件分岐を使って処理を書くと

js

1if(message.content === "武器VC"){ 2 if(message.member.voiceChannelID == undefined || message.member.voiceChannelID == null){ 3 message.channel.send("入ってないよ") 4 }else{ 5 message.channel.send("入ってるよ") 6 } 7 }

このような感じで判定することができます。

追記(2020年5月26日)
vcに入っている人を取得するには

js

1const vcch = message.guild.channels.get('チャンネルID'); 2vcch.members.forEach(member => { 3 console.log(member.id) 4})

でできると思います

分からない部分があれば具体的に書いてもらえると助かります。

投稿2020/05/20 23:40

編集2020/05/26 09:59
yutarou12

総合スコア155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問