private static async ValueTask GetLiveStatus(SoraApi soraApi, long biliUser, List <long> groupId, SubscriptionDBHelper dbHelper) { LiveInfo live; UserSpaceInfo biliUserInfo; //获取数据 try { biliUserInfo = UserApis.GetLiveRoomInfo(biliUser); live = LiveAPIs.GetLiveRoomInfo(biliUserInfo.LiveRoomInfo.ShortId); } catch (Exception e) { Log.Error("获取直播状态时发生错误", Log.ErrorLogBuilder(e)); return; } //需要更新数据的群 Dictionary <long, LiveStatusType> updateDict = groupId .Where(gid => dbHelper.GetLastLiveStatus(gid, biliUser) != live.LiveStatus) .ToDictionary(gid => gid, _ => live.LiveStatus); //更新数据库 foreach (var status in updateDict) { if (!dbHelper.UpdateLiveStatus(status.Key, biliUser, live.LiveStatus)) { Log.Error("Database", "更新直播订阅数据失败"); } } //需要消息提示的群 var targetGroup = updateDict.Where(group => group.Value == LiveStatusType.Online) .Select(group => group.Key) .ToList(); if (targetGroup.Count == 0) { return; } //构建提示消息 MessageBody message = $"{biliUserInfo.Name} 正在直播!\r\n{biliUserInfo.LiveRoomInfo.Title}" + CQCodes.CQImage(biliUserInfo.LiveRoomInfo.CoverUrl) + $"直播间地址:{biliUserInfo.LiveRoomInfo.LiveUrl}"; foreach (var gid in targetGroup) { Log.Info("直播订阅", $"获取到{biliUserInfo.Name}正在直播,向群[{gid}]发送动态信息"); await soraApi.SendGroupMessage(gid, message); } }
public bool ParseUri(Uri uri) { try { if (uri == null || !uri.IsAbsoluteUri || uri.Scheme != Name || uri.Host != "app") { return(false); } var uriString = uri.OriginalString; var pathStartIndex = Name.Length + 6; if (uriString.Length < pathStartIndex + 2) { return(false); } var version = 1U; var versionDivideIndex = uriString .IndexOf('/', pathStartIndex + 1); if (versionDivideIndex != -1 && uriString[pathStartIndex + 1] == 'v' && uriString.Length > pathStartIndex + 2) { var versionString = uriString.Substring( pathStartIndex + 2, versionDivideIndex - pathStartIndex - 2); if (uint.TryParse(versionString, out version)) { uriString = uriString.Remove( pathStartIndex, versionString.Length + 2); uri = new Uri( uriString, UriKind.Absolute); } } if (version == 0) { version = 1; } if (!UserApis.TryGetValue(version, out var api)) { return(false); } return(api? .ParseUri(uri) ?? false); } catch (Exception ex) { LogManager.Default.Error(ex, $"User protocol schema[Name = {Name}] parse uri error"); return(false); } }