2017-09-18 71 views
-1

首先找到的性格,我是新来的这个东西。我想写一个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)是很明显不是真实的东西,他们只是“秀”我想那里做什么?

将是很好,如果有人可以告诉我怎么这样的事情是可能的。提前致谢。

+0

你试过做什么?显示你的尝试,并解释问题出在哪里 – UnholySheep

+0

基本上,我试图寻找通道的名称,但无法找到任何方法在代码中实际执行该操作。这个“大问题”在于我寻找真正的渠道并仅在那里搜索文本。 – CopperCable

+0

您可能想再次看看在您的代码中使用的Context.Channel对象。 –

回答

0

既然你在这里使用Context对象。我假设你在Discord.NET中使用CommandModule。

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

如果你希望你的机器人找到通过用户标记一个通道的通道。有Context.Tags,它返回标记对象的列表(如ITag)。只需循环它并获取带标记的通道对象即可。
(文档约ITag对象here。)

对于得到的消息,如果你的意思是过去的消息,对于IMessage​Channel对象GetMessagesAsync方法。
所以,你可以做var messages = Context.Channel.GetMessagesAsync(2);messages将包含最近发送过信息的2个元素的列表。
(文档的方法是here

注意:列表本身也将包含在用户只需发送到机器人的消息如果你想在这之前的2个消息,你可以得到的。 3消息,而忽略第一个元素。)

最后,只需遍历消息列表或其他内容,就可以使用.NET上的String.StartWith()方法来帮助简化您的工作。
(它在.NET文档中的here

+0

这工作,我只是不得不改变了一些,因为'GetMessagesAsync'不适合我。 – CopperCable

相关问题