如何通过 DiscordSocketClient 搜索具有特定 'author' 的消息(嵌入)?
How can I search for messages (embeds) with a particular 'author' through DiscordSocketClient?
我正在构建一个新的 Discord 机器人(当然),并且我一直在使用 Tweetinvi 进行 Twitter 集成。我已经让大多数 Twitter 流媒体位正常工作(至少,据我在简化测试中所知道的那样),但我想在 Discord 中使用 bot modify/delete posts 如果推文随后被删除。 Tweetinvi 有一个 TweetDeleted
事件,我可以用它来检测它作为我的流的一部分,但我很难弄清楚如何在 Discord 中找到 post。
我喜欢做的是“简单”:
- 从作者(由原始推文定义)搜索 posts(嵌入)
- 在嵌入
中找到具有匹配 .Url
值的 post
- 将 post 替换为类似“
THIS TWEET WAS DELETED
”的消息。
我 运行 遇到的问题是,我似乎无法找到执行“第 1 步”的方法 - 搜索并 return 任何 post来自指定的作者。到目前为止我发现的唯一选项是 GetMessagesAsync
方法,但它似乎没有办法过滤结果。另外,有了 100 条消息的“软限制”,我担心我仍然找不到要删除的消息。
我 post 在我的 class 中使用 DiscordSocketClient
对象的嵌入是这样的:
Me.A1FDiscordClient.GetGuild(Server.ID).GetTextChannel(PostingChannel).SendMessageAsync(MessageText.Trim, False, TweetBuilder.Build)
我已经开始为 deletion/modification 做一些类似的事情,但我想我现在只是在转动我的轮子:
Dim Messages = Me.A1FDiscordClient.GetGuild(Server.ID).GetTextChannel(PostingChannel).GetMessagesAsync(100)
我可能太笨了 and/or 完全忽略了一些东西,但我什至不确定一旦我拥有它该怎么办。我正在考虑使用 .Select(Of TResult)
,但我想我只是把自己搞得太扭曲了。我不一定需要一个完整的解决方案,但我真的可以请别人给我一个正确的方向。
- Discord 不会根据特定标准为 search/filter 机器人提供端点。检索消息的唯一方法是使用
GetMessagesAsync()
方法
- 技术上
GetMessagesAsync()
的限制是 Int32.MaxValue
。您看到的 100 只是默认值。这是因为 Discord 将 return 分块;一次 100 条消息。例如,如果您将限制设置为 1000,您将获得 10 个 100 块。
- 检索大量消息可能会出现问题?主要问题是检索消息所花费的时间长度,这可能会阻塞网关,除非将该过程卸载到它自己的任务中。
一个可能的解决方案是实现您自己的系统,用于链接和存储 Twitter posts 到 discord posts。可以像 Twitter post id 和 discord post id 的字典一样简单,它可以让你轻松找到与给定 twitter post.
相关的消息 id
我正在构建一个新的 Discord 机器人(当然),并且我一直在使用 Tweetinvi 进行 Twitter 集成。我已经让大多数 Twitter 流媒体位正常工作(至少,据我在简化测试中所知道的那样),但我想在 Discord 中使用 bot modify/delete posts 如果推文随后被删除。 Tweetinvi 有一个 TweetDeleted
事件,我可以用它来检测它作为我的流的一部分,但我很难弄清楚如何在 Discord 中找到 post。
我喜欢做的是“简单”:
- 从作者(由原始推文定义)搜索 posts(嵌入)
- 在嵌入 中找到具有匹配
- 将 post 替换为类似“
THIS TWEET WAS DELETED
”的消息。
.Url
值的 post
我 运行 遇到的问题是,我似乎无法找到执行“第 1 步”的方法 - 搜索并 return 任何 post来自指定的作者。到目前为止我发现的唯一选项是 GetMessagesAsync
方法,但它似乎没有办法过滤结果。另外,有了 100 条消息的“软限制”,我担心我仍然找不到要删除的消息。
我 post 在我的 class 中使用 DiscordSocketClient
对象的嵌入是这样的:
Me.A1FDiscordClient.GetGuild(Server.ID).GetTextChannel(PostingChannel).SendMessageAsync(MessageText.Trim, False, TweetBuilder.Build)
我已经开始为 deletion/modification 做一些类似的事情,但我想我现在只是在转动我的轮子:
Dim Messages = Me.A1FDiscordClient.GetGuild(Server.ID).GetTextChannel(PostingChannel).GetMessagesAsync(100)
我可能太笨了 and/or 完全忽略了一些东西,但我什至不确定一旦我拥有它该怎么办。我正在考虑使用 .Select(Of TResult)
,但我想我只是把自己搞得太扭曲了。我不一定需要一个完整的解决方案,但我真的可以请别人给我一个正确的方向。
- Discord 不会根据特定标准为 search/filter 机器人提供端点。检索消息的唯一方法是使用
GetMessagesAsync()
方法 - 技术上
GetMessagesAsync()
的限制是Int32.MaxValue
。您看到的 100 只是默认值。这是因为 Discord 将 return 分块;一次 100 条消息。例如,如果您将限制设置为 1000,您将获得 10 个 100 块。 - 检索大量消息可能会出现问题?主要问题是检索消息所花费的时间长度,这可能会阻塞网关,除非将该过程卸载到它自己的任务中。
一个可能的解决方案是实现您自己的系统,用于链接和存储 Twitter posts 到 discord posts。可以像 Twitter post id 和 discord post id 的字典一样简单,它可以让你轻松找到与给定 twitter post.
相关的消息 id