2017-03-12 2 views
0

현재 불화 봇에서 작업 중입니다. 무언가를 입력하면 명령을 내려고했는데 봇은! say 부분이없는 경우에만 다시 말합니다. 여기에서 볼 수 있듯이 부분 문자열을 사용했습니다. 다운로드 한 메시지가 문자열로 바뀌면 마치 하나처럼 작동하지 않는 것 같습니다. 내가 commmand를 불화에 넣었을 때, 그냥 작동하지 않습니다. 오류 메시지가 표시되지 않습니다. 그것은 단지 응답하지 않습니다.메시지 문자열을 부분 문자열로 구분합니다.

private void RegisterSayCommand() 
    { 
     commands.CreateCommand("say") 
      .Do(async (e) => 
      { 
       string messagestosay, message_b; 
       int message_sub; 
       Message[] message_a; 
       message_a = await e.Channel.DownloadMessages(1); 
       message_b = message_a.ToString(); 
       message_sub = message_b.Length; 
       messagestosay = message_b.Substring(4, message_sub); 

       await e.Channel.SendMessage(messagestosay); 
      }); 
    } 

답변

0

메시지를 다운로드하면 Message[] 데이터 형식이 반환됩니다. 그리고 메시지를 얻기 위해 문자열로 직접 변환 할 수 없습니다.

대신 e.Args[0]을 사용하고, 기본적으로 string 데이터 형식을 반환하며 명령이 없으면 메시지가 포함됩니다.
예 : 내 명령 내 코드가 string x = e.Args[0];이고 '! this this'라고 입력합니다. "this"는 x의 값이됩니다.

이렇게 효과적으로 부분 문자열을 지정할 필요가 없습니다. 말 그대로해야 할 일은 string message_a = e.Args[0];이며 message_a을 채널로 바로 보냅니다.

편집 : 이제 봇이 뒤에 입력을 허용하려면 .Parameter("user", ParameterType.Unparsed)을 추가하십시오. 이렇게하면 봇이 사용자로부터 추가 입력을받을 수 있습니다.

+0

나는이 방법을 알고 있지만 코드에서 사용하는 방법을 이해하지 못한다. 코드에서 어떻게 사용했는지 더 자세히 설명하십시오 :) – SugoiSheep

+0

'string messageSay = e.Args [0]; 기다리고 있습니다 e.Channel.SendMessage (messageSay);', 그것은 문자 그대로 명령 함수 안에있는 코드입니다. ** 처음 **,이 코드를 사용해보십시오. ** 두 번째 **는 messageSay가 문자열이고 명령을 부분 문자열로 처리하지 않아도되는 방식입니다. ** 세 번째 **는 이전 코드에서 텍스트 채널에'message_b '를 보내고 그것이 이상하다는 것을 알아 차립니다. ** 마지막으로 ** 여기에 부분이 있습니다 :'Message [] '데이터 유형을 문자열로 직접 변환 할 수있는 방법이 없기 때문에 이전 코드가 작동하지 않습니다. 이는 배열이기 때문이며 Discord.NET에서도' 그런 종류의 기능이 아직 없습니다. – WQYeo

+0

죄송합니다. 작동하지 않는 것 같습니다. – SugoiSheep

관련 문제