3
1

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 1 year has passed since last update.

【Discord.js V14】取得するVCの音声をロールによって判別する

Last updated at Posted at 2023-03-31

皆さん初めまして。Morichanと申します。
下記の※の記述を理解したうえで、記事を読んでください。

※DiscordBot開発初心者の書いた記事です。
(また、プログラミング自体、2年ほどのブランクあり)

BOTでVCに音楽を流す機能やBOTでVCを録音する機能までの流れに関しては、別の記事にまとめてあります。

関連記事:

目次

  1. 開発環境
  2. テスト用のロールを作成、付与する
  3. 取得するVCの音声をロールによって判別する
  4. 関連記事

開発環境

OS (Windows11)
discord.js (14.7.1)
node.js (18.13.0)
npm (8.19.3)
@discordjs/voice (^0.14.0)

テスト用のロールを作成、付与する

今回は仮にtestというロールを作成、付与して実行。

  • ロールを作成して、IDを取得。
    image.png
    image.png
    image.png
    image.png

  • config.jsonに必要な記述を追記。

{
    "LISTENER": {
        "CLIENT_ID": "ここにBOT1のCLIENT_IDを記述",
        "TOKEN": "ここにBOT1のTOKENを記述"
    },
    "SPEAKER": {
        "CLIENT_ID": "ここにBOT2のCLIENT_IDを記述",
        "TOKEN": "ここにBOT2のTOKENを記述"
    }
    "GUILD_ID": "ここにBOTを追加したサーバーのIDを記述",
    "TEST_ROLE": "ここにtestというロールのIDを記述"
}

取得するVCの音声をロールによって判別する

  • stream.jsでuserIdからユーザーを取得する。
connection1.receiver.speaking.on('start', (userId) => {
	let member = interaction.guild.members.cache.get(userId);
  • stream.jsにtestというロールがあるか判別するコードを記述する。
		if (member.roles.cache.has(TEST_ROLE)) {
			const standaloneInput = new AudioMixer.Input({
---(省略)---
			rawStream.on('end', () => {
				if (this.audioMixer != null) {
					this.audioMixer.removeInput(standaloneInput);
					standaloneInput.destroy();
					rawStream.destroy();
					p.destroy();
				}
			});
		}
		else {
			return;
		}
	});
}
await interaction.reply('VCを中継します!');
  • node index.jsを行い、Discordでコマンド/streamを入力。
    無事に、テストというロールが付与されたユーザーの音声のみが中継されました。

関連記事

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?