public static async Task Handle(Packet p, Presence pr) { var ms = new MemoryStream(p.Data); using var reader = new SerializationReader(ms); var presenceIds = new List <int>(); int length = reader.ReadInt16(); for (var i = 0; i < length; i++) { presenceIds.Add(reader.ReadInt32()); } foreach (var prId in presenceIds) { var otherPresence = PresenceManager.GetPresenceById(prId); if (otherPresence is not null) { await pr.UserPresence(otherPresence); } else { await pr.UserLogout(prId); } } }
public static async Task Handle(Packet p, Presence pr) { var ms = new MemoryStream(p.Data); using var reader = new SerializationReader(ms); var userId = reader.ReadInt32(); var spectatingPresence = PresenceManager.GetPresenceById(userId); pr.Spectating = spectatingPresence; await pr.Spectating.SpectatorJoined(pr.Id); if (pr.Spectating.SpectatorChannel is null) { var channel = new Channel($"spect_{pr.Spectating.Id}", "", 1, true); pr.Spectating.SpectatorChannel = channel; ChannelManager.Channels.TryAdd(channel.RawName, channel); await pr.Spectating.JoinChannel($"spect_{pr.Spectating.Id}"); } await pr.JoinChannel($"spect_{pr.Spectating.Id}"); spectatingPresence.Spectators.Add(pr); }
public static void Handle(Packet p, Presence pr, OyasumiDbContext context) { var ms = new MemoryStream(p.Data); using var reader = new SerializationReader(ms); var id = reader.ReadInt32(); var friend = PresenceManager.GetPresenceById(id); if (friend is null) { return; } var exists = context.Friends.FirstOrDefault(x => x.Friend2 == id); if (exists is not null) { return; } context.Friends.Add(new () { Friend1 = pr.Id, Friend2 = id }); Base.FriendCache[pr.Id].Add(friend.Id); context.SaveChanges(); }
public static async Task <Match> ReadMatch(this SerializationReader reader) { var match = new Match(); reader.ReadInt16(); // match id reader.ReadByte(); // in progress match.Type = (MatchTypes)reader.ReadByte(); match.ActiveMods = (Mods)reader.ReadInt32(); match.GameName = reader.ReadString(); match.GamePassword = reader.ReadString(); reader.ReadString(); // beatmap name match.BeatmapId = reader.ReadInt32(); match.BeatmapChecksum = reader.ReadString(); match.Beatmap = (await BeatmapManager.Get(match.BeatmapChecksum)).Item2; foreach (var slot in match.Slots) { slot.Status = (SlotStatus)reader.ReadByte(); } foreach (var slot in match.Slots) { slot.Team = (SlotTeams)reader.ReadByte(); } foreach (var slot in match.Slots) { if ((slot.Status & SlotStatus.HasPlayer) > 0) { reader.ReadInt32(); } } match.Host = PresenceManager.GetPresenceById(reader.ReadInt32()); match.PlayMode = (PlayMode)reader.ReadByte(); match.ScoringType = (MatchScoringTypes)reader.ReadByte(); match.TeamType = (MatchTeamTypes)reader.ReadByte(); match.FreeMods = reader.ReadBoolean(); if (match.FreeMods) { foreach (var slot in match.Slots) { slot.Mods = (Mods)reader.ReadInt32(); } } match.Seed = reader.ReadInt32(); return(match); }
public static async Task Handle(Packet p, Presence pr) { var match = pr.CurrentMatch; if (match is null) { return; } var reader = new SerializationReader(new MemoryStream(p.Data)); var target = PresenceManager.GetPresenceById(reader.ReadInt32()); if (target is null) { return; } await target.MatchInvite(pr, $"Come join to my game: [osump://{match.Id}/{match.GamePassword} {match.GameName}]"); }
public static async Task UBan(Presence pr, string channel, string message, string[] args) { var user = Base.UserCache[args[0]]; if (!user.Banned()) { await ChannelManager.BotMessage(pr, channel, $"Bye, bye, {user.Username}"); user.Privileges &= ~Privileges.Normal; await using (var db = MySqlProvider.GetDbConnection()) await db.ExecuteAsync($"UPDATE Users SET Privileges = {(int)user.Privileges} WHERE Id = {user.Id}"); var target = PresenceManager.GetPresenceById(user.Id); if (target is not null) { await target.LoginReply(LoginReplies.WrongCredentials); await target.Notification("Your account is banned."); } new Thread(async() => { IEnumerable <DbScore> scores = null; await using (var db = MySqlProvider.GetDbConnection()) { scores = await db.QueryAsync <DbScore>($"SELECT * FROM Scores " + $"WHERE UserId = {user.Id} " + $"AND Completed = {(int)CompletedStatus.Best}"); } foreach (var score in scores) { var lbMode = score.Relaxing ? LeaderboardMode.Relax : LeaderboardMode.Vanilla; var beatmap = (await BeatmapManager.Get(score.FileChecksum, "", 0, true, score.PlayMode)).Item2; if (beatmap is not null) { await beatmap.UpdateLeaderboard(lbMode, score.PlayMode); } } }).Start(); } else { await ChannelManager.BotMessage(pr, channel, $"Welcome back, {user.Username}"); user.Privileges |= Privileges.Normal; await using (var db = MySqlProvider.GetDbConnection()) { await db.ExecuteAsync($"UPDATE Users SET Privileges = {(int)user.Privileges} WHERE Id = {user.Id}"); } new Thread(async() => { IEnumerable <DbScore> scores = null; await using (var db = MySqlProvider.GetDbConnection()) { scores = await db.QueryAsync <DbScore>($"SELECT * FROM Scores " + $"WHERE UserId = {user.Id} " + $"AND Completed = {(int)CompletedStatus.Best}"); } foreach (var score in scores) { var lbMode = score.Relaxing ? LeaderboardMode.Relax : LeaderboardMode.Vanilla; var beatmap = (await BeatmapManager.Get(score.FileChecksum, "", 0, true, score.PlayMode)).Item2; if (beatmap is not null) { await beatmap.UpdateLeaderboard(lbMode, score.PlayMode); } } }).Start(); } }