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);
            }
        }
Exemple #6
0
        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);
            }
        }