2017-09-18 11 views
-1

우선,이 글을 처음 접했습니다. 특정 채널에서 사용자가 보낸 모든 메시지의 시작 부분에있는 문자를 찾는 Discord-bot 함수를 작성하려고합니다. 그리고 봇이 해당 문자를 두 번 연속 찾지 않으면 처리합니다. ChannelName.Equal("channel_text")Dont.FindCharacterTwoTimesInARow.Equals(neededCharacter) 실제 상황이 매우 분명 아니라는 것을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"); 

    } 

} 

주, 그들은 단지 "쇼"내가이하고 싶어.

다른 사람이 나에게 가능한 것을 어떻게 보여줄 수 있다면 좋을 것입니다. 미리 감사드립니다.

+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은 최근 보낸 메시지의 두 요소가 포함 된 목록입니다.
(방법에 대한 문서는 here입니다.)

(참고 : 목록 자체도 사용자가 바로 로봇에 전송하는 메시지가 포함 된 것입니다 당신이 그 전에이 메시지를 원한다면, 당신은 얻을 수 있습니다. 3 메시지를 무시하고 첫 번째 요소를 무시하십시오.)

마지막으로 메시지 목록 또는 루프를 반복하면 .NET에서 String.StartWith() 메서드가있어보다 쉽게 ​​사용할 수 있습니다.
(.NET 문서의 경우 here에 있음)

+0

그게 효과가 있었는데,'GetMessagesAsync'가 제대로 작동하지 않아 조금만 바꿔 줘야했습니다. – CopperCable