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

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

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

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

JavaScript

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

Q&A

解決済

2回答

5759閲覧

【discord.js】リアクションしたユーザー自身にロールを付与したい

soukun

総合スコア8

Discord

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

JavaScript

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

0グッド

0クリップ

投稿2020/07/22 14:37

編集2020/07/23 02:00

前提・実現したいこと

DiscordのBot開発をしています。
Botの発言にリアクションをするとリアクションしたユーザーにロールが追加される様にしたいです。
DiscordのBot開発は初心者なので、わかりやすく解説してただけるとありがたいです。

発生している問題・エラーメッセージ

リアクションをしたユーザーにロールを追加したいのですが、ユーザーがリアクションをするとBot自身にロールが追加されてしまっています。

要するに、リアクションしたユーザーAにロールを付与したいのに、なぜかBot自身にロールが付与されてしまっているといった現象が起きています。

該当のソースコード

Botがメッセージを投稿する箇所

Javascript

1client.on('ready', async () => { 2 console.log('ready...'); 3 const fastmessage = await client.channels.cache.find(ch => ch.name === '村役場').send('参加する方は、ここにリアクションしてください!');//メッセージ送信 4 const fastmessagereaction = await fastmessage.react('1️⃣');//リアクションをBot自身が追加 5});

Botがリアクションに反応する箇所

Javascript

1client.on('messageReactionAdd', async (reaction, user) => { 2 const message = reaction.message; 3 //ユーザーのリアクション(1️⃣)にのみ反応 4 if (reaction.emoji.name === '1️⃣' && !user.bot) { 5 const role = message.guild.roles.cache.find(role => role.name === '参加者'); 6 message.member.roles.add(role);//ロール追加 7 } 8});

試したこと

Bot自身がリアクションを追加するコードを削除したり、リアクションに反応する箇所のif文の「&& !user.bot」の部分を削除して試しましたが、同じ結果でした。

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

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

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

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

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

guest

回答2

0

自己解決

かなり長い間放置してしまいました。すみません。
その間に自己解決してしまったので、載せておきます。

修正前

Javascript

1client.on('messageReactionAdd', async (reaction, user) => { 2 const message = reaction.message; 3 //ユーザーのリアクション(1️⃣)にのみ反応 4 if (reaction.emoji.name === '1️⃣' && !user.bot) { 5 const role = message.guild.roles.cache.find(role => role.name === '参加者'); 6 user.roles.add(role);//ロール追加 7 } 8});
修正後

Javascript

1client.on('messageReactionAdd', async (reaction, user) => { 2 //ユーザーのリアクション(1️⃣)にのみ反応 3 if (reaction.emoji.name === '1️⃣' && !user.bot) { 4 const role = reaction.message.guild.roles.cache.find(role => role.name === '参加者'); 5 reaction.message.guild.member(user).roles.add(role);//ロール追加 6 } 7});

投稿2020/12/21 09:10

soukun

総合スコア8

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

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

0

js

1client.on('messageReactionAdd', async (reaction, user) => { 2 const message = reaction.message; 3 //ユーザーのリアクション(1️⃣)にのみ反応 4 if (reaction.emoji.name === '1️⃣' && !user.bot) { 5 const role = message.guild.roles.cache.find(role => role.name === '参加者'); 6 user.roles.add(role);//ロール追加 7 } 8});

だと思われます

投稿2020/07/22 20:43

sevenc-nanashi

総合スコア643

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

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

soukun

2020/07/23 01:07

回答ありがとうございます。"message.member.roles.add(role);"を"user.roles.add(role);"に差し替えると、エラーが発生してしまいました。ユーザーではなくBotに追加されてしまう原因はおそらく、"reaction"に本来欲しい情報ではない情報が含まれている様に思うのですが、どうでしょうか。
sevenc-nanashi

2020/07/23 01:15

> エラーが発生 どんなエラーですか? トレースバックを貼って下さい。
soukun

2020/07/23 01:24

この様なエラーが発生しています。 (node:35685) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'add' of undefined at Client.<anonymous> (/Users/XXXXXX/jinro-bot/bot.js:30:16)
soukun

2020/07/23 01:54

そのページはこの問題を解決しようとした際に閲覧しました。そのページのコードも試しましたが、リアクションをした本人ではなく、なぜかメッセージを送ったBotにロールが付与されてしまいます。 正しく動作すれば、ユーザーAがBotのメッセージにリアクションすると「参加者」というロールをユーザーAがもらうことができるのに、ユーザーAが「参加者」というロールが欲しくてリアクションすると、Bot自身に「参加者」というロールが付与されてしまうと言った現象です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問