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);
}
}
}
这里是一个小例子,你如何能做到这一点。 在这种情况下,您可以使用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;
}
}
这将与Discord一起工作?如果确实如此,你可以使用代码工作吗?我不想把它搞砸xD – user8328934
我正在使用visual studio btw – user8328934
该代码仅仅是一个例子。您必须调整代码才能使其在特定应用程序中运行。你只需要从用户那里得到命令并对它们做出反应。希望有所帮助。 – Ben
问题是执行停止命令的代码? –
是的,以及如何使它每隔5秒重复自己的消息 – user8328934