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

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

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

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

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

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

Q&A

解決済

1回答

1651閲覧

特定のメッセージのリアクションにのみ反応するbotを作りたい

hinanon

総合スコア13

Discord

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

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

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

0グッド

2クリップ

投稿2021/10/14 16:08

編集2021/10/14 16:12

#前提・実現したいこと
discord.jsでロール管理パネルを作ろうとしています。
パネル自体は先にembedで作ってあり、
それを送信した後にチャンネルIDとメッセージIDを取得してプログラムに書き込む感じです。
そしてそのメッセージのリアクションにのみ反応するコードを作ろうとしたのですがエラーが出ました。

#該当のソースコード

js

1const discord = require('discord.js'); 2const client = new discord.Client({ partials: ['MESSAGE', 'CHANNEL', 'REACTION', 'USER', 'GUILD_MEMBER'] }); 3const { token } = require('./config.json'); 4client.login(token); 5 6const handleReaction = async (channelID, messageID, callback) => { 7 const channel = await client.channels.fetch(channelID) 8 const message = await channel.messages.fetch(messageID) 9 const collector = message.createReactionCollector(() => true) 10 collector.on('collect', (reaction, user) => callback(reaction, user)) 11 } 12 13client.on('ready', () => { 14 15 handleReaction('チャンネルID取得後に記入', 'メッセージID取得後に記入', (reaction, user) => { 16 if (reaction.emoji.name === '????') { 17 reaction.message.guild.member(user).roles.add('ロールID:1') 18 } 19 if (reaction.emoji.name === '????') { 20 reaction.message.guild.member(user).roles.add('ロールID:2') 21 } 22 }) 23})

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

console

1 const message = await channel.messages.fetch(messageID) 2 ^ 3 4ReferenceError: channel is not defined 5 at Client.<anonymous> (/Users/user/bot/bots/server.js:136:19) 6 at Client.emit (node:events:402:35) 7 at MessageReactionAdd.handle (/Users/user/bot/bots/node_modules/discord.js/src/client/actions/MessageReactionAdd.js:49:17) 8 at Object.module.exports [as MESSAGE_REACTION_ADD] (/Users/user/bot/bots/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js:4:37) 9 at WebSocketManager.handlePacket (/Users/user/bot/bots/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31) 10 at WebSocketShard.onPacket (/Users/user/bot/bots/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22) 11 at WebSocketShard.onMessage (/Users/user/bot/bots/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10) 12 at WebSocket.onMessage (/Users/user/bot/bots/node_modules/ws/lib/event-target.js:132:16) 13 at WebSocket.emit (node:events:390:28) 14 at Receiver.receiverOnMessage (/Users/user/bot/bots/node_modules/ws/lib/websocket.js:983:20) 15

#試したこと
Clientにpartialsの追加
Intentsの変更など
(どちらも効果がありませんでした。)

#バージョン
discord.js: 12.5.2
node: 16.11.1
npm: 8.0.0

#参考サイト
https://scrapbox.io/discordjs-japan/固定メッセージへのリアクションに反応して役職を付けるサンプル

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

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

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

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

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

Waki285

2021/10/14 23:28

間違っていないように見えるので、 const channel = await client.channels.fetch(channelID) console.log(channel); const message = await channel.messages.fetch(messageID) のようにしてもらって、channelの中身を教えてもらってよろしいですか?
hinanon

2021/10/15 01:33

```js <ref *2> TextChannel { type: 'text', deleted: false, id: '808677148142993408', name: 'testbots', rawPosition: 15, parentID: '800800059426865264', permissionOverwrites: Collection(2) [Map] { '800799801239273492' => PermissionOverwrites { id: '800799801239273492', type: 'role', deny: [Permissions], allow: [Permissions] }, '801089276455419945' => PermissionOverwrites { id: '801089276455419945', type: 'role', deny: [Permissions], allow: [Permissions] } }, topic: null, nsfw: false, lastMessageID: '898207065686818837', rateLimitPerUser: 0, lastPinTimestamp: null, guild: <ref *1> Guild { members: GuildMemberManager { cacheType: [class Collection extends Collection], cache: [Collection [Map]], guild: [Circular *1] }, channels: GuildChannelManager { cacheType: [class Collection extends Collection], cache: [Collection [Map]], guild: [Circular *1] }, roles: RoleManager { cacheType: [class Collection extends Collection], cache: [Collection [Map]], guild: [Circular *1] }, presences: PresenceManager { cacheType: [class Collection extends Collection], cache: [Collection [Map]] }, voiceStates: VoiceStateManager { cacheType: [class Collection extends Collection], cache: Collection(0) [Map] {}, guild: [Circular *1] }, deleted: false, available: true, id: '800799801239273492', shardID: 0, name: 'テスト', icon: '68bac281e6e50e05e1ca088f5d6d6b09', splash: null, discoverySplash: null, region: 'japan', memberCount: 27, large: false, features: [], applicationID: null, afkTimeout: 300, afkChannelID: null, systemChannelID: '800801339109802014', embedEnabled: undefined, premiumTier: 0, premiumSubscriptionCount: 0, verificationLevel: 'NONE', explicitContentFilter: 'DISABLED', mfaLevel: 0, joinedTimestamp: 1613208867078, defaultMessageNotifications: 'MENTIONS', systemChannelFlags: SystemChannelFlags { bitfield: 0 }, maximumMembers: 250000, maximumPresences: null, approximateMemberCount: null, approximatePresenceCount: null, vanityURLCode: null, vanityURLUses: null, description: null, banner: null, rulesChannelID: null, publicUpdatesChannelID: null, preferredLocale: 'en-US', ownerID: '741370295826382869', emojis: GuildEmojiManager { cacheType: [class Collection extends Collection], cache: Collection(0) [Map] {}, guild: [Circular *1] } }, messages: MessageManager { cacheType: [class LimitedCollection extends Collection], cache: LimitedCollection(0) [Map] { maxSize: 200 }, channel: [Circular *2] }, _typing: Map(0) {} } ``` これが出力されていました。
Waki285

2021/10/16 00:38

それだと正常にできているように見えます。 エラーを起こしているのは本当にそこですか?
hinanon

2021/10/16 15:24

エラーを起こしている行を見間違えていました・・・ 別の行に全く同じコードがありました・・・
guest

回答1

0

自己解決

指摘の部分を確認したところエラーを起こしているのは別の部分でした。

投稿2021/10/16 15:25

hinanon

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問