2017-03-09 4 views
1

Discrod 서버용 자체 봇을 만들고 있습니다. 지금까지 나는 "! roll"과 같은 명령을 내릴 수 있었고 채팅에서 "6"을 회신합니다.불화 : 사용자로부터 로봇에게 보내는 직접 메시지를 잡는 방법?

그러나 나는 사람들이 채팅에 명령을 입력하는 방식을 싫어합니다. 이는 어느 시점에서 파괴적 일 수 있기 때문입니다. 사용자로부터 로봇에게 직접 메시지로 명령을 호출 할 수있는 가능성을 만들고 싶습니다. DM 로봇이 "굴려"채팅에 쓸 것입니다. "andrew rolled 1".

하지만 어떻게 할 수 있는지 또는 가능한지 전혀 알 수 없습니다. 어떤 아이디어?

+0

당신은 봇 명령 메시지를 삭제 할 수있는 사람이 나를 :) 낭비 5 시간 절약 할 수 있습니다. – Pipe

+0

예, 직접 메시지에 대한 답을 찾지 못할 경우를 대비해 해결책으로 생각했습니다. 어떤 경우에는 봇이 채널 스팸을 피하기 위해 직접 메시지에 응답하기를 원하기 때문에 직접 메시지 솔루션을 선호하기는하지만. 건설적인 답장을 보내 주셔서 감사합니다! – Andrew

답변

2

한 가지 해결책은 그냥 당신이 명령 서비스 설정 아래이 위양/이벤트 핸들러의 코드를 삽입해야합니다/EventHandlers

var client = new DiscordClient(); 
     client.MessageCreated += (s, e) => 
      { 
       if (!e.Message.IsAuthor && e.Message.ToLower().Contains("roll")){ 
/*Code here*/ 
}  
      } 
      EventHandler<MessageEventArgs> handler = new EventHandler<MessageEventArgs>(HandleMessageCreated); 
      client.MessageCreated += handler; 

대표단을 사용 할 수있는 봇하지 더블 포스트 사람이 !roll을하지 않습니다.
또한 채널 객체에 IsPrivate 변수를 사용하여 채널에서 보낸 메시지가 DM/PM 채널인지 여부를 확인할 수 있습니다.

Discord.NET v0.9.6에 대한 문서가 필요한 경우에는 here입니다.

또한 Discord.NET v1.0.0 +을 대신 사용해보십시오.

1

내가 온라인에서 찾은 현재 답변이 실망 스러웠다.이 방법은 내가 한 것인데 ("Context"사람들이 말하는 것을 찾을 수 없거나 "IsPrivate"). 객체 자체를 검사하여 이러한 문제를 파악해야했습니다.

소스에 따라 SocketMessage.Channel 속성이 SocketTextChannel에서 SocketDMChannel로 변경된 것처럼 보입니다. 다음은 메시지가 DM인지 확인하기 위해 만든 방법입니다.

private bool IsPrivateMessage(SocketMessage msg) { 
    return (msg.Channel.GetType() == typeof(SocketDMChannel)); 
} 

희망이