/// <summary> /// Event that is called when the Tracker fetches new data containing no Embed /// </summary> /// <returns>A Task that can be awaited</returns> private async Task OnMinorEvent(ulong channelID, Tracker.BaseTracker sender, string notification) { var message = new EventMessage() { ChannelId = channelID, Sender = sender.Name, Notification = notification }; await StaticBase.BotCommunication.SendMessage(JsonConvert.SerializeObject(message)); }
/// <summary> /// Event that is called when the Tracker fetches new data containing no Embed /// </summary> /// <returns>A Task that can be awaited</returns> private async Task OnMinorEvent(ulong channelID, Tracker.BaseTracker sender, string notification) { if (!Program.GetShardFor(channelID)?.ConnectionState.Equals(Discord.ConnectionState.Connected) ?? true) { return; } try { if (!notification.Equals("")) { await((Discord.WebSocket.SocketTextChannel)Program.Client.GetChannel(channelID)).SendMessageAsync(notification); } if ((DateTime.Now - sender.LastActivity).TotalSeconds > 10) { sender.LastActivity = DateTime.Now; await sender.UpdateTracker(); } } catch (Exception e) { await Program.MopsLog(new LogMessage(LogSeverity.Warning, "", $"A {typeof(T).Name} for {sender.Name} got an error:", e)); if (Program.Client.GetChannel(channelID) == null || (await((IGuildChannel)Program.Client.GetChannel(channelID)).Guild.GetCurrentUserAsync()) == null) { await TryRemoveTrackerAsync(sender.Name, channelID); await Program.MopsLog(new LogMessage(LogSeverity.Warning, "", $"Removed Tracker: {sender.Name} Channel {channelID} is missing")); } else { var permission = (await((IGuildChannel)Program.Client.GetChannel(channelID)).Guild.GetCurrentUserAsync()).GetPermissions(((IGuildChannel)Program.Client.GetChannel(channelID))); if (!permission.SendMessages) { await TryRemoveTrackerAsync(sender.Name, channelID); var perms = string.Join(", ", permission.ToList().Select(x => x.ToString() + ": " + permission.Has(x))); await Program.MopsLog(new LogMessage(LogSeverity.Warning, "", $"Removed a {typeof(T).Name} for {sender.Name} from Channel {channelID} due to missing Permissions:\n{perms}", e)); if (permission.SendMessages) { await((ITextChannel)Program.Client.GetChannel(channelID)).SendMessageAsync($"Removed tracker for `{sender.Name}` due to missing Permissions"); } } } } }
/// <summary> /// Event that is called when the Tracker fetches new data containing no Embed /// </summary> /// <returns>A Task that can be awaited</returns> private async Task OnMinorEvent(ulong channelID, Tracker.BaseTracker sender, string notification) { if (!Program.Client.ConnectionState.Equals(Discord.ConnectionState.Connected)) { return; } try { if (!notification.Equals("")) { await((Discord.WebSocket.SocketTextChannel)Program.Client.GetChannel(channelID)).SendMessageAsync(notification); } } catch { if (Program.Client.GetChannel(channelID) == null || (await((IGuildChannel)Program.Client.GetChannel(channelID)).Guild.GetCurrentUserAsync()) == null) { await TryRemoveTrackerAsync(sender.Name, channelID); await Program.MopsLog(new LogMessage(LogSeverity.Warning, "", $"Removed Tracker: {sender.Name} Channel {channelID} is missing")); } else { var permission = (await((IGuildChannel)Program.Client.GetChannel(channelID)).Guild.GetCurrentUserAsync()).GetPermissions(((IGuildChannel)Program.Client.GetChannel(channelID))); if (!permission.SendMessages || !permission.ViewChannel || !permission.ReadMessageHistory) { await TryRemoveTrackerAsync(sender.Name, channelID); await Program.MopsLog(new LogMessage(LogSeverity.Warning, "", $"Removed Tracker: {sender.Name} Channel {channelID} due to missing permissions")); if (permission.SendMessages) { await((ITextChannel)Program.Client.GetChannel(channelID)).SendMessageAsync($"Removed tracker for `{sender.Name}` due to missing Permissions"); } } } } }
/// <summary> /// Event that is called when the Tracker fetches new data containing an Embed /// Updates or creates the notification message with it /// </summary> /// <returns>A Task that can be awaited</returns> private async Task OnMajorEvent(ulong channelID, Embed embed, Tracker.BaseTracker sender, string notification) { if (!Program.Client.ConnectionState.Equals(Discord.ConnectionState.Connected)) { return; } try { if (sender is BaseUpdatingTracker) { BaseUpdatingTracker tracker = sender as BaseUpdatingTracker; if (tracker.ToUpdate.ContainsKey(channelID)) { var message = ((IUserMessage)((ITextChannel)Program.Client.GetChannel(channelID)).GetMessageAsync(tracker.ToUpdate[channelID]).Result); if (message != null) { await message.ModifyAsync(x => { x.Content = notification; x.Embed = embed; }); } else { var newMessage = await((Discord.WebSocket.SocketTextChannel)Program.Client.GetChannel(channelID)).SendMessageAsync(notification, embed: embed); tracker.ToUpdate[channelID] = newMessage.Id; await tracker.setReaction((IUserMessage)message); await UpdateDBAsync(tracker); } } else { var message = await((Discord.WebSocket.SocketTextChannel)Program.Client.GetChannel(channelID)).SendMessageAsync(notification, embed: embed); tracker.ToUpdate.Add(channelID, message.Id); await tracker.setReaction((IUserMessage)message); await UpdateDBAsync(tracker); } } else { await((Discord.WebSocket.SocketTextChannel)Program.Client.GetChannel(channelID)).SendMessageAsync(notification, embed: embed); } } catch { //Check if channel still exists, or existing only in cache if (Program.Client.GetChannel(channelID) == null || (await((IGuildChannel)Program.Client.GetChannel(channelID)).Guild.GetCurrentUserAsync()) == null) { //await TryRemoveTrackerAsync(sender.Name, channelID); await Program.MopsLog(new LogMessage(LogSeverity.Warning, "", $"Removed {typeof(T).Name}: {sender.Name} Channel {channelID} is missing")); } //Check if permissions were modified, to an extend of making the tracker unusable else { var permission = (await((IGuildChannel)Program.Client.GetChannel(channelID)).Guild.GetCurrentUserAsync()).GetPermissions(((IGuildChannel)Program.Client.GetChannel(channelID))); if (!permission.SendMessages || !permission.ViewChannel || !permission.ReadMessageHistory || (sender is Tracker.BaseUpdatingTracker && (!permission.AddReactions || !permission.ManageMessages))) { await TryRemoveTrackerAsync(sender.Name, channelID); await Program.MopsLog(new LogMessage(LogSeverity.Warning, "", $"Removed a {typeof(T).Name} for {sender.Name} from Channel {channelID} due to missing Permissions")); if (permission.SendMessages) { await((ITextChannel)Program.Client.GetChannel(channelID)).SendMessageAsync($"Removed tracker for `{sender.Name}` due to missing Permissions"); } } } } }
/// <summary> /// Event that is called when the Tracker fetches new data containing an Embed /// Updates or creates the notification message with it /// </summary> /// <returns>A Task that can be awaited</returns> private async Task OnMajorEvent(ulong channelID, Embed embed, Tracker.BaseTracker sender, string notification) { if (!Program.GetShardFor(channelID)?.ConnectionState.Equals(Discord.ConnectionState.Connected) ?? true) { return; } try { if (sender is BaseUpdatingTracker) { BaseUpdatingTracker tracker = sender as BaseUpdatingTracker; if (tracker.ToUpdate.ContainsKey(channelID)) { var message = ((IUserMessage)((ITextChannel)Program.Client.GetChannel(channelID)).GetMessageAsync(tracker.ToUpdate[channelID]).Result); if (message != null) { await message.ModifyAsync(x => { x.Content = notification; x.Embed = embed; }); } else { var newMessage = await((Discord.WebSocket.SocketTextChannel)Program.Client.GetChannel(channelID)).SendMessageAsync(notification, embed: embed); tracker.ToUpdate[channelID] = newMessage.Id; await tracker.setReaction((IUserMessage)message); await UpdateDBAsync(tracker); } } else { var message = await((Discord.WebSocket.SocketTextChannel)Program.Client.GetChannel(channelID)).SendMessageAsync(notification, embed: embed); tracker.ToUpdate.Add(channelID, message.Id); await tracker.setReaction((IUserMessage)message); await UpdateDBAsync(tracker); } } else { await((Discord.WebSocket.SocketTextChannel)Program.Client.GetChannel(channelID)).SendMessageAsync(notification, embed: embed); } if ((DateTime.Now - sender.LastActivity).TotalSeconds > 10) { sender.LastActivity = DateTime.Now; await sender.UpdateTracker(); } } catch (Exception e) { await Program.MopsLog(new LogMessage(LogSeverity.Warning, "", $"A {typeof(T).Name} for {sender.Name} got an error:", e)); //Check if channel still exists, or existing only in cache if (Program.Client.GetChannel(channelID) == null || (await((IGuildChannel)Program.Client.GetChannel(channelID)).Guild.GetCurrentUserAsync()) == null) { //await TryRemoveTrackerAsync(sender.Name, channelID); await Program.MopsLog(new LogMessage(LogSeverity.Warning, "", $"Removed {typeof(T).Name}: {sender.Name} Channel {channelID} is missing")); } //Check if permissions were modified, to an extend of making the tracker unusable else { var permission = (await((IGuildChannel)Program.Client.GetChannel(channelID)).Guild.GetCurrentUserAsync()).GetPermissions(((IGuildChannel)Program.Client.GetChannel(channelID))); if (!permission.SendMessages || (sender is Tracker.BaseUpdatingTracker && (!permission.ManageMessages || !permission.ReadMessageHistory))) { await TryRemoveTrackerAsync(sender.Name, channelID); var perms = string.Join(", ", permission.ToList().Select(x => x.ToString() + ": " + permission.Has(x))); await Program.MopsLog(new LogMessage(LogSeverity.Warning, "", $"Removed a {typeof(T).Name} for {sender.Name} from Channel {channelID} due to missing Permissions:\n{perms}", e)); if (permission.SendMessages) { await((ITextChannel)Program.Client.GetChannel(channelID)).SendMessageAsync($"Removed tracker for `{sender.Name}` due to missing Permissions"); } } } } }