尝试编辑用户操作上的特定嵌入字段
Posted
技术标签:
【中文标题】尝试编辑用户操作上的特定嵌入字段【英文标题】:Trying to edit a specific embed field on a user action 【发布时间】:2020-02-01 04:56:46 【问题描述】:我正在尝试触发对嵌入(已发送)消息的编辑,同时保持所有其他字段的值相同
我发现这个答案是一种灵感(适用于示例):Embed message doesn't update 但这似乎并没有涵盖所有领域,只有第一个领域。没有更多关于这个主题的内容(或者我不擅长谷歌搜索:))。
所以新嵌入只是第一个字段,而不是所有(未更改的)字段。
activityMsg = new Discord.RichEmbed(
title: 'Some text',
description: 'Description',
color: 3447003,
footer:
icon_url: image,
text: image
,
thumbnail:
url: image
,
fields: [
name: 'Text',
value: 'Text2',
,
name: 'Date and time',
value: '2pm',
,
name: 'Participants',
value: '@User',
,
name: 'Waiting list',
value: '@user2',
,
name: 'Max players',
value: '22',
]
);
const reactionFilterPlus = (reaction, user) => reaction.emoji.name === emoji_plus;
if(typeof title != undefined && title != null && data.length == 4 && error == '')
var title = title[0].replace('[','').replace(']','');
// add reaction emoji to message
msg.channel.send(activityMsg)
.then(msg => msg.react(constants.emoji_plus))
.then(mReaction =>
// createReactionCollector - responds on each react, AND again at the end.
const collector = mReaction.message
.createReactionCollector(reactionFilterPlus,
time: 15000
);
// set collector events
collector.on('collect', r =>
// immutably copy embed's Like field to new obj
let embedLikeField = Object.assign(, activityMsg.fields[0]);
// update 'field' with new value
embedLikeField.value = `$user <3`;
// create new embed with old title & description, new field
const newEmbed = new Discord.RichEmbed(
title: activityMsg.title,
description: activityMsg.description,
fields: [embedLikeField]
);
// edit message with new embed
// NOTE: can only edit messages you author
r.message.edit(newEmbed)
.catch(console.log);
);
)
.catch(console.log);
我希望这一行能够获取所有字段,但事实并非如此。
// immutably copy embed's Like field to new obj
let embedLikeField = Object.assign(, activityMsg.fields[0]);
我已尝试let embedLikeField = Object.assign(, activityMsg.fields[0] === 'Participants')
,但随后我收到以下关于字段名不存在的错误。
DiscordAPIError: Invalid Form Body
embed.fields[0].name: This field is required
at item.request.gen.end (/usr/src/app/node_modules/discord.js/src/client/rest/RequestHandlers/Sequential.js:79:15)
at then (/usr/src/app/node_modules/snekfetch/src/index.js:215:21)
at process._tickCallback (internal/process/next_tick.js:68:7)
英语不是我的母语,我仍在学习 nodejs 对这些问题提前抱歉。
【问题讨论】:
【参考方案1】:Object.assign() 对源执行浅层克隆,您是要克隆整个嵌入还是仅克隆它的第一个字段?
activityMsg.fields[0]
指的是您的activityMsg 对象中称为字段的列表中的第一个元素。尝试使用 activityMsg 作为源调用您的 assign()。
【讨论】:
以上是关于尝试编辑用户操作上的特定嵌入字段的主要内容,如果未能解决你的问题,请参考以下文章