如何在D#+中获取DiscordClient运行时长及解决连接终止错误?
在D#中获取机器人运行时长并制作Embed命令
获取DiscordClient的Uptime
D#的DiscordClient实例自带Uptime属性,返回TimeSpan类型,可直接获取机器人从启动到当前的运行时长。你可以将其格式化为天、小时、分钟、秒的组合文本,提升可读性。
制作查询运行时长的命令
以下是完整的命令实现,通过D#命令模块创建!uptime命令,用DiscordEmbed返回运行时长:
using DSharpPlus; using DSharpPlus.CommandsNext; using DSharpPlus.CommandsNext.Attributes; using DSharpPlus.Entities; public class BotCommands : BaseCommandModule { [Command("uptime")] [Description("查询机器人的在线运行时长")] public async Task UptimeCommand(CommandContext ctx) { // 获取机器人运行时长 TimeSpan uptime = ctx.Client.Uptime; // 格式化为易读文本 string uptimeText = $"**{uptime.Days}**天 **{uptime.Hours}**小时 **{uptime.Minutes}**分钟 **{uptime.Seconds}**秒"; // 创建Embed消息 var embed = new DiscordEmbedBuilder() .WithTitle("🤖 机器人运行时长") .WithColor(DiscordColor.Green) .AddField("当前在线时长", uptimeText, inline: false) .WithTimestamp(DateTimeOffset.Now); // 发送Embed await ctx.RespondAsync(embed: embed.Build()); } }
机器人初始化时注册命令模块的代码:
var commands = discord.UseCommandsNext(new CommandsNextConfiguration { StringPrefixes = new[] { "!" } // 自定义命令前缀 }); commands.RegisterCommands<BotCommands>();
修复连接终止错误
连接终止多由网关连接异常导致,常见解决方法如下:
启用自动重连:初始化
DiscordClient时开启自动重连,断开后自动尝试恢复连接var discord = new DiscordClient(new DiscordConfiguration { Token = "你的机器人Token", TokenType = TokenType.Bot, AutoReconnect = true // 开启自动重连 });监听异常事件:监听
ClientErrored和SocketClosed事件,记录错误并在必要时手动触发重连discord.ClientErrored += (s, e) => { Console.WriteLine($"网关错误: {e.Exception.Message}"); return Task.CompletedTask; }; discord.SocketClosed += (s, e) => { Console.WriteLine($"连接断开,代码: {e.CloseCode}, 原因: {e.CloseMessage}"); // 自动重连失效时手动触发 _ = discord.ReconnectAsync(); return Task.CompletedTask; };更新D#版本:使用最新稳定版的DSharpPlus,旧版本可能存在已知的连接Bug
遵守API限制:避免短时间内发送大量请求,严格遵守Discord的API速率限制
排查网络问题:确保机器人所在服务器能稳定访问Discord网关,检查防火墙、代理是否屏蔽了443端口
内容的提问来源于stack exchange,提问作者user20554274
相关产品推荐
相关产品推荐

