【问题标题】:C# Discord Bot Coding: Creating a command that spams messages then stops with another commandC# Discord Bot 编码:创建一个发送垃圾邮件的命令,然后用另一个命令停止
【发布时间】:2017-12-24 03:20:26
【问题描述】:

我只需要一行代码,每五秒钟发送一次垃圾邮件,然后在输入另一个命令后停止。例如,如果用户输入“~raid”,则机器人将每五秒发送一次“RAID RAID”垃圾邮件,并在用户输入“~stop”时停止。如果有人可以提供帮助,那就太好了。

这是我目前得到的: MyBot 类 { DiscordClient 不和谐; 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);
    }
}

}

【问题讨论】:

  • 问题是执行停止命令?
  • 是的,以及如何使消息每 5 秒重复一次

标签: c# discord


【解决方案1】:

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

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;
        }
    }

【讨论】:

  • 这适用于 Discord 吗?如果是这样,你能用代码来处理它吗?我不想搞砸了xD
  • 我正在使用 Visual Studio 顺便说一句
  • 代码只是一个例子。您必须调整代码以使其在您的特定应用程序中工作。您只需要从用户那里获取命令并对它们做出反应。希望对您有所帮助。
  • @user8328934 幸运的是,discord API(您必须使用)有文档:discordapp.com/developers/docs/reference
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 2020-12-20
  • 2018-01-23
  • 2021-11-07
  • 2021-11-14
  • 2020-02-03
  • 2021-05-11
相关资源
最近更新 更多