埋め込みメッセージで投票したいです。
誰かがリアクションを追加したときに、いいねを追加して、埋め込みのいいねの数を表示したいと思います。ここに例があります:
誰かが「いいね」をクリックするたびに、すべてのコード行が機能し、最終的に「いいね」にリンクされているフィールド値を次のように変更します。
messageReaction.message.embeds[0].fields[0] = "Some much like";
ただし、埋め込みメッセージは更新されません。
次のメッセージを更新しようとしました:
function doAfakeEdit(message){
message.edit(message.content);
}
それはまだフィールドの古い値を保持します。
私は何をすべきか?
あなたの問題は、変数名を再利用しているのか、古いデータを編集したメッセージに戻すのか、それとも何か他のものなのか、疑問に思います。とにかく、これが私のために働いたものです:
1)ユーザーに送信するEmbed
を作成します(すでにこれを行っていると思います。imgrに表示したEmbed
を作成します):
_const embed = new Discord.RichEmbed({
title: 'Suggestion by someone',
description: 'This is a test suggestion. Can you please like it or dislike it :)',
fields: [{
name: 'Like:',
value: '<3'
}]
});
_
2)Embed
をあなたのチャンネルに送信します(私はそれにいくつかのReaction
sを追加しました-おそらくあなたと同じ方法です):
_// add reaction emojis to message
message.channel.send(embed)
.then(msg => msg.react('✅'))
.then(mReaction => mReaction.message.react('❎'))
.then(mReaction => {
// fun stuff here
})
.catch(console.log);
_
3)_// fun stuff here
_を配置した場所にReactionCollector
を作成します(別のreactionFilter
と時間制限を使用できます):
_const reactionFilter = (reaction, user) => reaction.emoji.name === '✅';
// createReactionCollector - responds on each react, AND again at the end.
const collector = mReaction.message
.createReactionCollector(reactionFilter, {
time: 15000
});
// set collector events
collector.on('collect', r => {
// see step 4
});
// you can put anything you want here
collector.on('end', collected => console.log(`Collected ${collected.size} reactions`));
_
4)_'collect'
_イベント(_// see step 4
_を配置)で、ほぼ同様の値を持つ新しいEmbed
を作成し(または変更しないでください)、その新しいEmbed
を元のメッセージに戻します.edit(...)
経由:
_// immutably copy embed's 'Like:' field to new obj
let embedLikeField = Object.assign({}, embed.fields[0]);
// update 'field' with new value - you probably want emojis here
embedLikeField.value = '<3 <3 <3';
// create new embed with old title & description, new field
const newEmbed = new Discord.RichEmbed({
title: embed.title,
description: embed.description,
fields: [embedLikeField]
});
// edit message with new embed
// NOTE: can only edit messages you author
r.message.edit(newEmbed)
.then(newMsg => console.log(`new embed added`)) // this is not necessary
.catch(console.log); // useful for catching errors
_
したがって、全体は次のようになります。
_const reactionFilter = (reaction, user) => reaction.emoji.name === '✅';
const embed = new Discord.RichEmbed({
title: 'Suggestion by someone',
description: 'This is a test suggestion. Can you please like it or dislike it :)',
fields: [{
name: 'Like:',
value: '<3'
}]
});
// add reaction emoji to message
message.channel.send(embed)
.then(msg => msg.react('✅'))
.then(mReaction => mReaction.message.react('❎'))
.then(mReaction => {
// createReactionCollector - responds on each react, AND again at the end.
const collector = mReaction.message
.createReactionCollector(reactionFilter, {
time: 15000
});
// set collector events
collector.on('collect', r => {
// immutably copy embed's Like field to new obj
let embedLikeField = Object.assign({}, embed.fields[0]);
// update 'field' with new value
embedLikeField.value = '<3 <3 <3';
// create new embed with old title & description, new field
const newEmbed = new Discord.RichEmbed({
title: embed.title,
description: embed.description,
fields: [embedLikeField]
});
// edit message with new embed
// NOTE: can only edit messages you author
r.message.edit(newEmbed)
.then(newMsg => console.log(`new embed added`))
.catch(console.log);
});
collector.on('end', collected => console.log(`Collected ${collected.size} reactions`));
})
.catch(console.log);
_
私のコードでは、楽しみのために、✅絵文字が押されたときにのみ編集が行われます。上記のコードの編集についてサポートが必要な場合はお知らせください。それが役に立てば幸い。
非常に遅い答え。しかし、誰かがこれを見つけた場合に備えて。はるかに短い方法があります。
また、大きな埋め込みがあり、埋め込み全体を再構築したくない場合は、さらに便利です。
message.embeds[0].fields[0] = "Some much like;
message.edit(new Discord.RichEmbed(message.embeds[0]));