2017-11-28 21 views
1

사용자가 차단 된 단어가 포함 된 메시지를 게시했는지 확인하려고합니다. 차단 된 단어가 있지만 메시지를 확인할 수없는 경우 메시지를 삭제하려고합니다. 단어는 어떤 식 으로든. MessageReceived 함수에 OnMessageReceived 콜백을 할당했습니다. 나는 이것에 관해 다소 새로운 것이기 때문에 쉬운 대답일지도 모른다. 그러나 나는 과거 2 일 동안 그것을 계산하려고 노력하고 있었다.단어 배열에서 메시지를 삭제하려고합니다.

private async Task OnMessageReceived(SocketMessage msg) 
    { 
     for (int i = 0; i < blacklistedWords.Length; i++) 
     { 
      if (msg.Content.Contains(blacklistedWords[i])) 
      { 
       Console.WriteLine(msg.Author.ToString() + " did a bad"); 
       await msg.Channel.DeleteMessagesAsync(); //I can't find out what to pass in here to delete the message 
      } 
     } 
    } 
+1

'i = blacklistedWords.Length; '란 무엇입니까? –

+0

무엇을 전달해야할지 확실하지 않은 함수에'msg'를 전달하십시오. 그리고 이것은 단 한 번만 실행되는 것 같습니다. 왜냐하면 이것은 항상 한 번 실행되기 때문에 루프가 쓸모 없게 만듭니다. – brandNew

+0

'msg'를 전달하려고 시도했지만 그 작업만으로는 작동하지 않습니다. 나는 또한 'i = blacklistedWords.Length;'도 삭제했다. – ComxT

답변

0

좋아요. 알아 냈습니다. 나는 단지 내가 먼저 삭제하려고했던 메시지를 얻을 필요가 있었다. 여기에 최종 코드가 있습니다

private async Task OnMessageReceived(SocketMessage msg) 
    { 
     foreach (var word in blacklistedWords) 
     { 
      if (msg.Content.Contains(word)) 
      { 
       var messagesToDelete = await msg.Channel.GetMessagesAsync(1).Flatten(); 
       await msg.Channel.DeleteMessagesAsync(messagesToDelete); 
      } 
     } 
    } 
0

글로벌 중복 데이터 구조를 만들고 편집 된 내용을 데이터 구조에 할당 해보십시오. I.E

List<SocketMessageModel > mylist = new List<SocketMessageModel >(); 

private async Task OnMessageReceived(SocketMessage msg) 
{ 
    SocketMessageModel msgModel = new SocketMessageModel(); 
    msgModel.Content = msg.Content; 
    msgModel.Author = msg.Author; 
    Boolean blackListCheck = false; 

    for (int i = 0; i < blacklistedWords.Length; i++) 
    { 
      Console.WriteLine(msg.Author.ToString() + " did a bad"); 
      if (msg.Content.Contains(blacklistedWords[i])) 
      { 
       blackListCheck = true; 
       break; 
      } 

    } 

    if (blackListCheck == false) 
    { 
     mylist.add(msg); 
    } 

} 
public class SocketMessageModel 
{ 
    public string Author {get; set; } 
    public string Content {get; set; } 
} 

이 해결 방법을 사용하면 블랙리스트에 포함 된 모든 단어가 포함 된 메시지는 전역 데이터 구조에서 제외됩니다. 그런 다음 각 메시지를 구문 분석 한 후 간단한 목록에 저장된 모든 메시지로 원하는 모든 작업을 수행 할 수 있습니다.

+0

'List mylist = new List 에 using 문이 필요합니까? >();'지시문이나 어셈블리 정보가 없으므로'msg.Content'는 읽기 전용이고'Convert.ToCharacter'에서는 Convert에 ToCharacter에 대한 정의가 없습니다. – ComxT

+0

주석을 반영하도록 업데이트 됨. 글로벌 변수 선언 방법 연구 https://stackoverflow.com/questions/35083652/how-to-declare-a-variable-for-global-use –

+0

블랙리스트 단어가 포함 된 메시지를 삭제하려고합니다. 그래서 다른 단어를 저장하는 것이 필요하지 않은 것 같습니다. 나는 0.9.6에서 업데이트하기 전에 내가 매번 문자열을 전달해야했기 때문에 이것을 수행 할 수 있기 때문에 내가 어디로 갈 지 모르겠다. – ComxT