C#不一致的Bot编码:创建一个命令,垃圾邮件,然后停止与另一个命令

问题描述:

我只需要一个工作线程的代码,每五秒传递一条消息,然后停止后,另一个命令输入。就像一个例子,如果用户输入“〜raid”,那么机器人将每隔5秒发送一次“RAID RAID”并在用户停止时停止。如果任何人都可以提供帮助,那就太棒了。C#不一致的Bot编码:创建一个命令,垃圾邮件,然后停止与另一个命令

这是我到目前为止: class MyBot { DiscordClient discord; CommandService命令;

public MyBot() 
    { 
     discord = new DiscordClient(x => 
     { 
      x.LogLevel = LogSeverity.Info; 
      x.LogHandler = Log; 
     }); 

     discord.UsingCommands(x => 
     { 
      x.PrefixChar = '~'; 
      x.AllowMentionPrefix = true; 
     }); 

     commands = discord.GetService<CommandService>(); 

     commands.CreateCommand("checked") 
      .Do(async (e) => 
      { 

     commands.CreateCommand("weewoo") 
      .Do(async (e) => 
      { 
       await e.Channel.SendMessage("**WEE WOO**"); 
      }); 

     discord.ExecuteAndWait(async() => 
     { 
      await discord.Connect("discordkeyhere", TokenType.Bot); 
     }); 
    } 

    public void Log(object sender, LogMessageEventArgs e) 
    { 
     Console.WriteLine(e.Message); 
    } 
} 

}

+0

问题是执行停止命令的代码? –

+0

是的,以及如何使它每隔5秒重复自己的消息 – user8328934

这里是一个小例子,你如何能做到这一点。 在这种情况下,您可以使用Start和Stop方法从外部启动和停止您的bot。

class MyBot 
{ 
    public MyBot() 
    { 
    } 

    CancellationTokenSource cts; 

    public void Start() 
    { 
     cts = new CancellationTokenSource(); 
     Task t = Task.Run(() => 
     { 
      while (!cts.IsCancellationRequested) 
      { 
       Console.WriteLine("RAID RAID"); 
       Task.Delay(5000).Wait(); 
      } 
     }, cts.Token); 
    } 

    public void Stop() 
    { 
     cts?.Cancel(); 
    } 
} 

下面是测试MyBot类

static void Main(string[] args) 
    { 
     try 
     { 
      var b = new MyBot(); 

      while (true) 
      { 
       var input = Console.ReadLine(); 
       if (input.Equals("~raid", StringComparison.OrdinalIgnoreCase)) 
        b.Start(); 
       else if (input.Equals("~stop", StringComparison.OrdinalIgnoreCase)) 
        b.Stop(); 
       else if (input.Equals("exit", StringComparison.OrdinalIgnoreCase)) 
        break; 
       Task.Delay(1000); 
      } 

     } 
     catch (Exception) 
     { 

      throw; 
     } 
    } 
+0

这将与Discord一起工作?如果确实如此,你可以使用代码工作吗?我不想把它搞砸xD – user8328934

+0

我正在使用visual studio btw – user8328934

+0

该代码仅仅是一个例子。您必须调整代码才能使其在特定应用程序中运行。你只需要从用户那里得到命令并对它们做出反应。希望有所帮助。 – Ben