Discord Bot 应删除 "user pinned message to channel" 消息
Discord Bot shall delete "user pinned message to channel" message
我对编写 discord 机器人有点陌生,但现在我遇到了问题,找不到解决方案。
我什至不确定我使用的是哪种语言——我在 Atom 工作,用节点 index.js 启动我的机器人并使用函数 / 类 / ... 从这里开始:
https://discord.js.org/#/docs/main/stable/general/welcome
我的问题
但是,通过特定命令,我的机器人会向特定频道发送消息并将其固定。但我希望机器人删除显示 "user pinned message to channel" 的系统消息(它必须是这样的,我的 discord 不是英文的),但我不知何故无法收到该消息。
我试过的
我试过这样得到它:
if (message.content.toLowerCase().startsWith(`${BOT} hat eine nachricht an diesen kanal angeheftet`) { somefunction}
其中 BOT 是 <@ Bot ID>,"hat eine nachricht an diesen kanal angeheftet" 有点像 "pinned message to channel" 的德语版本,但没有任何反应。它不执行某些功能(用 message.channel.send(something)
测试过)
然后我想我可以像这样使用 fetchMessages()
(https://discord.js.org/#/docs/main/stable/class/TextChannel?scrollTo=fetchMessages):
function botAngeheftet(message, planungsChannel) {
let mes = planungsChannel.fetchMessages({limit:1})
.then(messages => planungsChannel.send("TEST:\n" + messages.first())
.catch(console.error);
但是 planungsChannel 中的消息是
TEST:
没有任何消息。我把limit改成2,在planungsChannel(sometext)里写了点东西,再次执行函数,结果是
TEST:
sometext
所以.. fetchMessages() 似乎有效 - 但不适用于系统消息。
我的问题
我怎样才能 "get" 使用该系统消息?或者:我怎样才能让机器人删除说 "user pinned message to channel" 的系统消息?
这是一个理论上的解决方案(未经测试),但应该可行。
discord 上的每个 message
都有一个 type
属性,属于几种类型,你可以看到 here。在这种情况下,您可以使用的具体 type
是 if message.type === "PINS_ADD"
,即
的 type
the system message that says "user pinned message to channel"
你所指的。
简而言之,您所要做的就是:
on msg event (msg)
if(msg.type === "PINS_ADD") msg.delete();
这是伪代码,不是实际代码,希望你能转换它。
Documentation
固定消息时发送的消息类型是'CHANNEL_PINNED_MESSAGE'。
client.on('messageCreate', async (message) => {
if (message.author.bot && message.type === 'CHANNEL_PINNED_MESSAGE') {
message.delete();
}
}
我对编写 discord 机器人有点陌生,但现在我遇到了问题,找不到解决方案。 我什至不确定我使用的是哪种语言——我在 Atom 工作,用节点 index.js 启动我的机器人并使用函数 / 类 / ... 从这里开始: https://discord.js.org/#/docs/main/stable/general/welcome
我的问题
但是,通过特定命令,我的机器人会向特定频道发送消息并将其固定。但我希望机器人删除显示 "user pinned message to channel" 的系统消息(它必须是这样的,我的 discord 不是英文的),但我不知何故无法收到该消息。
我试过的
我试过这样得到它:
if (message.content.toLowerCase().startsWith(`${BOT} hat eine nachricht an diesen kanal angeheftet`) { somefunction}
其中 BOT 是 <@ Bot ID>,"hat eine nachricht an diesen kanal angeheftet" 有点像 "pinned message to channel" 的德语版本,但没有任何反应。它不执行某些功能(用 message.channel.send(something)
测试过)
然后我想我可以像这样使用 fetchMessages()
(https://discord.js.org/#/docs/main/stable/class/TextChannel?scrollTo=fetchMessages):
function botAngeheftet(message, planungsChannel) {
let mes = planungsChannel.fetchMessages({limit:1})
.then(messages => planungsChannel.send("TEST:\n" + messages.first())
.catch(console.error);
但是 planungsChannel 中的消息是
TEST:
没有任何消息。我把limit改成2,在planungsChannel(sometext)里写了点东西,再次执行函数,结果是
TEST:
sometext
所以.. fetchMessages() 似乎有效 - 但不适用于系统消息。
我的问题
我怎样才能 "get" 使用该系统消息?或者:我怎样才能让机器人删除说 "user pinned message to channel" 的系统消息?
这是一个理论上的解决方案(未经测试),但应该可行。
discord 上的每个 message
都有一个 type
属性,属于几种类型,你可以看到 here。在这种情况下,您可以使用的具体 type
是 if message.type === "PINS_ADD"
,即
type
the system message that says "user pinned message to channel"
你所指的。
简而言之,您所要做的就是:
on msg event (msg)
if(msg.type === "PINS_ADD") msg.delete();
这是伪代码,不是实际代码,希望你能转换它。 Documentation
固定消息时发送的消息类型是'CHANNEL_PINNED_MESSAGE'。
client.on('messageCreate', async (message) => {
if (message.author.bot && message.type === 'CHANNEL_PINNED_MESSAGE') {
message.delete();
}
}