当前位置: 首页 > 知识库问答 >
问题:

C#Discord Bot编码:创建一个命令,然后用另一个命令停止发送垃圾邮件

聂涛
2023-03-14

我只需要一行代码,每五秒钟发送一条消息,然后在输入另一个命令后停止。例如,如果用户输入“~raid”,则bot将每隔五秒钟发送一次“raid raid”,并在用户输入“~stop”时停止。如果有人能帮忙,那就太棒了。

到目前为止,我得到的是:类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);
    }
}

}

共有1个答案

端木野
2023-03-14

这里有一个小例子,你可以怎么做。在这种情况下,可以使用开始和停止方法从外部启动和停止机器人。

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;
        }
    }
 类似资料:
  • 问题内容: 我在Windows XP上使用Java,并且希望能够将命令发送到另一个程序,例如telnet。我不想简单地执行另一个程序。我要执行它,然后在它运行后向它发送一系列命令。这是我要执行的操作的代码,但是无效:(如果取消注释,并将命令更改为“ cmd”,它将按预期工作。请帮助。)这是一个简化的示例。在生产中,将发送更多命令,因此 请不要建议调用“ telnet localhost”。 问题答

  • 我想用concat解复用而不是concat协议得到结果,因为在脚本中自动化要困难得多 你知道是否可以用concat解复用来归档这个结果?多谢! 马西莫 frame=9745 fps=13 q=27.0 size=186368kb时间=00:19:02.29比特率=1336.5kbits/ 超过1000帧重复

  • 所以每当我发送一个错误的命令,比如!pong(其中!ping是正确的)bot返回时出现以下错误: (if(command.permissions.length){^ 无法读取未定义的属性权限 即使我删除了整个权限代码,它也会给我一个 TypeError:无法读取未定义的属性“users” 只有当我对这一点掌握错误的时候!没有命令或命令时发出砰砰声!告诉我前缀不是实际命令的任何内容。下面是我使用的代

  • 问题内容: 假设我的当前目录是 一个 。我想创建一个目录 乙 和文件“myfile.txt的”内部 乙 。 如何在终端的一个命令中做到这一点? 编辑: 目录可以嵌套多次。就像我可能要创建 B / C / D ,然后在其中创建“ myfile.txt”。我也不想重复目录部分。 以下命令将在任何级别创建目录。 和 将创建目录和文件。但是我不想在命令后重复目录部分。那可能吗? 问题答案: 或者,创建一个

  • 问题内容: 但它们似乎更复杂。 我只是想将文件复制到Linux 命令调用的每个结果中。 这是怎么了?: 谢谢 问题答案: 这就是你想要的: 细分/解释: :调用find命令 :从当前工作目录开始搜索。 由于未指定深度标记,因此将递归搜索所有子文件夹 :查找具有明确名称的文件 :对于搜索结果,对它们执行其他命令 :复制以覆盖返回到的每个结果; 想一想每个搜索结果的去向。 :用于分隔要在其后运行的不同

  • 本文向大家介绍每天一个linux命令之locate 命令,包括了每天一个linux命令之locate 命令的使用技巧和注意事项,需要的朋友参考一下 locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 c