如何在Discord.net中无需响应命令或事件即可主动触发消息发送
Discord.NET 机器人无外部触发主动执行操作解决方案
问题背景
入门开发Discord机器人时,命令响应类功能通常可以快速实现,但很多开发者都会遇到无法实现主动操作的问题,比如定时推送消息、上线主动通知等无需用户触发的操作,网上多数相关案例基于旧版本Discord.NET开发,无法直接复用。
实现方案
如果最初使用第三方封装的快速上手模板,很容易因为封装层级问题找不到操作入口,切换到Discord.NET官方示例代码架构后,可按照以下步骤实现需求:
- 所有主动访问服务器资源的操作,都需要放在*
OnReady事件*中执行,该事件触发代表机器人已经完成全量服务器数据拉取,已经获取到对应资源的访问权限,可避免空引用、无权限报错 - 先获取
DiscordSocketClient对象的实例引用,调用GetChannel()方法,传入目标频道的ID即可获取对应频道的操作对象 - 拿到频道对象后,即可按需执行发送消息、编辑消息、上传附件等任意主动操作,无需等待用户命令触发
参考代码示例
// 基于Discord.NET官方示例的OnReady事件实现示例 private readonly DiscordSocketClient _client; // 构造方法中已完成_client的初始化和事件绑定 private async Task OnReady() { // 替换为你需要主动操作的频道ID ulong targetChannelId = 1234567890123456789; var targetChannel = await _client.GetChannelAsync(targetChannelId) as IMessageChannel; // 非空校验避免运行时异常 if (targetChannel != null) { // 主动发送消息示例,可替换为你需要的任意操作逻辑 await targetChannel.SendMessageAsync("这是机器人主动推送的通知消息"); } }
内容的提问来源于stack exchange,提问作者user13596911
相关产品推荐
相关产品推荐

