基于C# Discord.net获取服务器所有者Twitter/Twitch链接的技术问题
解决Discord机器人动态获取服务器所有者Twitter链接的问题
嘿,我来帮你搞定这个动态拉取Twitter链接的需求!首先得提醒你:默认拿到的SocketGuildUser对象(也就是Context.Guild.Owner)只包含基础用户信息,社交链接这类细节是不会自动加载的,所以我们得先主动获取所有者的完整资料,再从中提取Twitter链接。
具体实现步骤与代码修改
- 第一步:在欢迎方法里,先调用
FetchAsync()获取服务器所有者的完整用户数据,确保能拿到社交链接信息。 - 第二步:从所有者的社交链接集合里筛选出Twitter的链接,同时做好空值处理,避免所有者没设置Twitter时机器人报错。
下面是修改后的完整代码:
private async Task AnnounceUserJoined(SocketGuildUser user) { var guild = user.Guild; var channel = guild.DefaultChannel; // 获取服务器所有者的完整用户资料 var owner = await guild.Owner.FetchAsync(); // 筛选出Twitter社交链接 var twitterLink = owner.SocialLinks.FirstOrDefault(s => s.Type == UserSocialLinkType.Twitter)?.Url; // 处理链接为空的情况,给出友好 fallback var ownerMention = string.IsNullOrEmpty(twitterLink) ? "our server owner" : $"[{owner.Username}]({twitterLink})"; await channel.SendMessageAsync($"Welcome, {user.Mention}. Please follow {ownerMention} on Twitter!"); }
版本兼容补充
如果你用的是较旧版本的Discord.NET,SocialLinks属性可能不存在,这时候可以改用ConnectedAccounts来筛选:
var twitterAccount = owner.ConnectedAccounts.FirstOrDefault(a => a.Type == ConnectionType.Twitter); var twitterLink = twitterAccount?.Url;
内容的提问来源于stack exchange,提问作者Thanory
相关产品推荐
相关产品推荐

