2017-03-27 19 views
1

私は私のコマンドに問題があります。それは問題を表示していないようですが、私はコマンドを使用するときに私は私のボットからこれを取得します。Discord.net 1.0 - メッセージを削除するには?

"エラー:入力テキストのパラメータが少なすぎます。"

IUserMessageまたはSocketMessageを使用する必要があるかどうかわかりません。両方を試してみて、通常は同じエラーが表示されます。

どこが間違っていたのですか?私はこれをしばらく修正しようとしており、これを把握しようとするとレンガの壁にいる。どんな助けもありがとう。

[Command("purge")] 
    [Summary("deletes set amount of text")] 
    [RequireUserPermission(GuildPermission.Administrator)] 
    [RequireBotPermission(GuildPermission.Administrator)] 
    public async Task PurgeChat(IUserMessage msg, int amount) 
    { 
     int messagesDeleted = 0; 
     var purgeMessage = await msg.Channel.SendMessageAsync("_purging in progress, give me a minute.._"); 
     var lastMessageID = purgeMessage.Id; 


     try 
     { 
      var stop = false; 
      while (amount > messagesDeleted) 
      { 
       var messages = await msg.Channel.GetMessagesAsync(lastMessageID, Direction.Before, 15).OfType<IUserMessage>().ToList(); 
       foreach (IUserMessage message in messages) 
       { 
        await message.DeleteAsync(); 
        messagesToDelete++; 
        if (messagesDeleted >= amount || messages.Count == 0) 
        { 
         stop = true; 
         break; 
        } 
        lastMessageID = messages.Last().Id; 
       } 
       if (stop || messages.Count == 0) 
       { 
        break; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      if (ex.Message != "The server responded with error 404 (NotFound): \"Unknown Message\"") 
      { 
       await Context.Channel.SendMessageAsync("Something fucked up while trying to delete messages, you are going to have to manually Delete them for now. or try again"); 
      } 
     } 
     finally 
     { 
      await purgeMessage.ModifyAsync(x => x.Content = "_Purge Completed, this message will self destruct in 5 seconds_"); 
      await Task.Factory.StartNew(async() => 
      { 
       await Task.Delay(5000); 
       await purgeMessage.DeleteAsync(); 
      }); 
     } 
    } 

答えて

3
[Command("purge", RunMode = RunMode.Async)] 
[Summary("Deletes the specified amount of messages.")] 
[RequireUserPermission(GuildPermission.Administrator)] 
[RequireBotPermission(ChannelPermission.ManageMessages)] 
public async Task PurgeChat(uint amount) 
{ 
    var messages = await this.Context.Channel.GetMessagesAsync((int)amount + 1).Flatten(); 

    await this.Context.Channel.DeleteMessagesAsync(messages); 
    const int delay = 5000; 
    var m = await this.ReplyAsync($"Purge completed. _This message will be deleted in {delay/1000} seconds._"); 
    await Task.Delay(delay); 
    await m.DeleteAsync(); 
} 
0

私はこの問題を参照してください。後で宣言するのではなく、msgというIUserMessageをパラメータとして取り入れました。これは、コマンドが実際にパージコマンドに意味をなさない余分な入力を持つことを期待しています。ここに私が持っているもの:

[Command("purge")] 
    [Name("purge <amount>")] 
    [Summary("Deletes a specified amount of messages")] 
    [RequireBotPermission(GuildPermission.ManageMessages)] 
    [RequireUserPermission(GuildPermission.ManageMessages)] 
    public async Task DelMesAsync(int delnum) 
    { 
     var items = await Context.Channel.GetMessagesAsync(delnum + 1).Flatten(); 
     await Context.Channel.DeleteMessagesAsync(items); 
    } 

私はすべてのメッセージング部分を取り出しましたが、これはパラメータの問題を解決するはずです。

関連する問題