public StarboardContext(StarboardContextType contextType, GuildData guildData, IUserMessage starredMessage, ITextChannel starredMessageTextChannel) { ContextType = contextType; this._guildData = guildData; this._starredMessage = starredMessage; this._starredMessageTextChannel = starredMessageTextChannel; }
public async Task Rescan() { try { GuildData guildData = Data.BotData.guildDictionary[Context.Guild.Id]; foreach (KeyValuePair <ulong, MessageData> messageDataKV in guildData.messageData) { IUserMessage message = await messageDataKV.Value.GetMessageAsync(Context.Guild); if (message != null) { await Starboard.RescanMessage(new StarboardContext(StarboardContextType.COMMAND_RESCANALL, guildData, messageDataKV.Value, message)); } else { await ReplyAsync($"❌ Could not find message `{messageDataKV.Key}`."); } } await ReplyAsync("✅ Rescanned all saved messages."); } catch (Exception e) { await HandleException(e); } }
public StarboardContext(StarboardContextType contextType, GuildData guildData, MessageData messageData, IUserMessage starredMessage) { ContextType = contextType; this._guildData = guildData; this._messageData = messageData; this._starredMessage = starredMessage; }
public async Task Scan(SocketTextChannel channel, string messageId) { try { GuildData guildData = Data.BotData.guildDictionary[Context.Guild.Id]; if (!UInt64.TryParse(messageId, out ulong msgId)) { await ReplyAsync(":x: Invalid message id"); return; } if (await channel.GetMessageAsync(msgId) is IUserMessage message) { await Starboard.RescanMessage(new StarboardContext(StarboardContextType.COMMAND_SCAN, guildData, message, channel)); await ReplyAsync(":white_check_mark: Message Was Scanned!"); } else { await ReplyAsync(":x: Message Not Found!"); } } catch (Exception e) { await HandleException(e); } }
public async Task SetMinStars(uint minStars) { try { GuildData guildData = Data.BotData.guildDictionary[Context.Guild.Id]; guildData.requiredStarCount = minStars; await ReplyAsync($":star: Set min star count to `{minStars}`"); } catch (Exception e) { await HandleException(e); } }
public async Task <IUserMessage> GetStarboardMessageAsync(IUserMessage msg, GuildData guildData = null) { IGuild guild = (msg.Channel as ITextChannel).Guild; if (guildData == null) { guildData = Data.BotData.guildDictionary[guild.Id]; } if (starboardMessageStatus != StarboardMessageStatus.CREATED || starboardMessageId == null) { return(null); } bool isNsfw = (msg.Channel as ITextChannel).IsNsfw; ITextChannel starboardChannel = isNsfw ? await guild.GetTextChannelAsync(guildData.starboardChannelNSFW) : await guild.GetTextChannelAsync(guildData.starboardChannel); return(await starboardChannel.GetMessageAsync(starboardMessageId.Value) as IUserMessage); }
public async Task SetStarboardChannel(SocketTextChannel channel) { try { GuildData guildData = Data.BotData.guildDictionary[Context.Guild.Id]; if (channel.IsNsfw) { guildData.starboardChannelNSFW = channel.Id; await ReplyAsync($":star: Set NSFW starboard channel to {channel.Mention}"); } else { guildData.starboardChannel = channel.Id; await ReplyAsync($":star: Set starboard channel to {channel.Mention}"); } } catch (Exception e) { await HandleException(e); } }
public static async Task <string> GetLeaderboardStringAsync(IGuild guild, uint page) { if (page == 0) { page = 1; } GuildData guildData = Data.BotData.guildDictionary[guild.Id]; IOrderedEnumerable <IGrouping <ulong, KeyValuePair <ulong, MessageData> > > userMessageGroups = from msgKv in guildData.messageData group msgKv by msgKv.Value.userId into msgGroup orderby msgGroup.Sum(mKv => mKv.Value.GetStarCount()) descending select msgGroup; uint pageCount = (uint)Math.Ceiling((float)userMessageGroups.Count() / ENTRIES_PER_PAGE); if (page > pageCount) { return($"❌ Page {page} does not exist. There are {pageCount} pages"); } return(await GetLeaderboardStringAsync(userMessageGroups.Skip((int)((page - 1) * ENTRIES_PER_PAGE)).Take((int)ENTRIES_PER_PAGE), guild, page, pageCount)); }
public StarboardContext(StarboardContextType contextType, GuildData guildData, MessageData messageData) { ContextType = contextType; this._guildData = guildData; this._messageData = messageData; }
public async Task Rediscover(ITextChannel channel) { try { DateTimeOffset rediscoverStart = DateTimeOffset.Now; GuildData guildData = Data.BotData.guildDictionary[Context.Guild.Id]; await ReplyAsync($"▶ Starting rediscover for channel {channel.Mention}"); IAsyncEnumerable <IReadOnlyCollection <IMessage> > messages = channel.GetMessagesAsync(200); await messages.ForEachAsync(async batch => { try { int rescanCount = 0; foreach (IMessage msg in batch) { if (msg.Timestamp > rediscoverStart) { continue; } if (msg is IUserMessage usrMsg) { if (!usrMsg.Author.IsBot) { await Starboard.RescanMessage(new StarboardContext(StarboardContextType.COMMANMD_REDISCOVER, guildData, usrMsg, channel)); rescanCount++; } else if (usrMsg.Author.Id == Context.Client.CurrentUser.Id) { StarboardContext context = await StarboardUtil.GetStarboardContextFromStarboardMessage(new StarboardContext(StarboardContextType.COMMANMD_REDISCOVER, guildData, usrMsg, channel)); if (context != null) { if (context.Exception != null) { await HandleContextException(context.Exception); } else { await Starboard.RescanMessage(context); rescanCount += 2; } } else { await Starboard.RescanMessage(new StarboardContext(StarboardContextType.COMMANMD_REDISCOVER, guildData, usrMsg, channel)); rescanCount++; } } } } await ReplyAsync($":white_check_mark: Rescanned `{rescanCount}` messages."); } catch (Exception e) { await HandleException(e); } }); } catch (Exception e) { await HandleException(e); } }