>source

나는 지난 며칠 동안 불화 봇을 작업 해왔고, 기능 중 하나가 작동하도록 관리했습니다 : (가입 할 때 dm 사용자에게 메시지를 설정하는 명령). 봇이 실제 메시지를 보내도록 할 수없는 것 같습니다.

   private async Task Join(SocketGuildUser UID)
    {
        if (UID.IsBot || UID.IsWebhook) return;
         Welcometxt= File.ReadAllText([FILE]);
        await UID.SendMessageAsync("Your Message Was Sucessfully set!");
    }
        private async Task HandleCommandAsync(SocketMessage arg)
    {
        var message = arg as SocketUserMessage;
        var context = new SocketCommandContext(_client, message);
        if (message.Author.IsBot) return;
        int argPos = 0;
        if (message.HasStringPrefix("!", ref argPos))
        {
            var result = await _commands.ExecuteAsync(context, argPos, _services);
            if (!result.IsSuccess) Console.WriteLine(result.ErrorReason);
        }
    }

로그를 확인할 때 var 메시지 및 컨텍스트와 함께 null 참조 오류가 발생하고 오류 검색 및 코드 변경을 시도했지만 조언을 사용할 수 없습니까? 이 두 가지 방법 중 하나에 오류가 있다고 생각하지만 100 % 긍정적 인 것은 아닙니다.

  • 답변 # 1

    나는 당신이 사용할 수 있다고 생각합니다 UserJoined 이를 달성하는 이벤트.

    UserJoined에 대한 이벤트 핸들러 정의

    public async Task UserJoined(SocketGuildUser user)
    {
       await user.SendMessageAsync("Hello");
    }
    
    

    등록

    private readonly DiscordSocketClient _client = new DiscordSocketClient();
    private readonly CommandService _commandService = new CommandService();
    public async Task MainAsync()
    {
       ....
       _client.UserJoined += UserJoined;
       ....
    }
    
    

    이것이 관련되어 있는지 확실하지 않지만 서버 구성원 인 텐트가 켜져 있는지 확인하십시오.

관련 자료

  • 이전 php - Laravel은 모든 뷰의 모든 경로에 특정 매개 변수를 전달합니다
  • 다음 regex r - 벡터 문자열을 사용하여 텍스트에서 문자열 제거