【问题标题】:Do stuff when Discord-bot doesn't find character in a channel当 Discord-bot 在频道中找不到角色时做一些事情
【发布时间】:2018-02-27 09:43:19
【问题描述】:

首先,我是新手。我想编写一个 Discord-bot 函数,它在用户在特定频道中发送的每条消息的开头查找一个字符,如果该机器人连续两次没有找到该字符,它就会起作用。

string neededCharacter = ">";

if (Dont.FindCharacterTwoTimesInARow.Equals(neededCharacter)) //If you don't find neededCharacter in sent messages two times in a row
{

   if (ChannelName.Equal("channel_name")) //look for the specific channel
   {

      //send message to the channel, stating that the character hasn't been found
      await Context.Channel.SendMessageAsync("'>' not found two times in a row");

   }

}

请注意,ChannelName.Equal("channel_text")Dont.FindCharacterTwoTimesInARow.Equals(neededCharacter) 显然不是真实的东西,它们只是“展示”我想在那里做的事情。

如果有人能告诉我这样的事情是如何可能的,那就太好了。提前致谢。

【问题讨论】:

  • 你尝试过做什么?展示你的尝试并解释问题出在哪里
  • 基本上,我试图查找频道的名称,但在代码中找不到任何实际执行此操作的方法。对我来说,“大问题”是找到实际频道并仅在其中搜索文本。
  • 您可能想再看一下Context.Channel 对象,您在其中的代码中使用。

标签: c# discord discord.net


【解决方案1】:

由于您在这里使用Context 对象。我假设您在 Discord.NET 中使用 CommandModule。

首先,你可以通过Context.Channel获得一个频道,它返回一个IMessage​Channel对象。

如果您希望机器人通过用户标记频道来查找频道。有Context.Tags,它返回标记对象的列表(如ITag)。只需遍历它并获取标记的通道对象。
(关于ITag对象的文档是here。)

对于获取消息,如果您指的是过去的消息,则有 GetMessagesAsync 方法用于 IMessage​Channel 对象。
所以你可以做var messages = Context.Channel.GetMessagesAsync(2);messages 将是一个包含最近发送消息的 2 个元素的列表。
(该方法的文档是here。)

(注意:列表本身也将包含用户刚刚发送给机器人的消息。如果您想要之前的 2 条消息,您可以改为获取 3 条消息并忽略第一个元素.)

最后,只需遍历消息列表或其他内容,.NET 上有一个 String.StartWith() 方法可以帮助您的生活更轻松。
(在 .NET 文档中的 here 中)

【讨论】:

  • 那行得通,我只需要稍微改变一下,因为GetMessagesAsync 对我来说不能正常工作。
猜你喜欢
  • 2020-07-13
  • 2020-11-28
  • 2018-11-26
  • 2020-09-02
  • 1970-01-01
  • 2019-05-05
  • 2020-02-16
  • 2020-06-29
  • 1970-01-01
相关资源
最近更新 更多