示例#1
0
        private async Task HandleReaction(Cacheable <IUserMessage, ulong> cachedMessage, IReaction reaction)
        {
            var emote = reaction.Emote;

            if (!_service.IsStarEmote(emote))
            {
                return;
            }

            var message = await cachedMessage.GetOrDownloadAsync();

            if (!(message.Channel is IGuildChannel channel))
            {
                return;
            }

            bool isUnmoderated = await _designatedChannelService
                                 .ChannelHasDesignationAsync(channel.Guild, channel, DesignatedChannelType.Unmoderated);

            bool starboardExists = await _designatedChannelService
                                   .AnyDesignatedChannelAsync(channel.GuildId, DesignatedChannelType.Starboard);

            if (isUnmoderated || !starboardExists)
            {
                return;
            }

            int reactionCount = _service.GetReactionCount(message, emote);

            if (await _service.ExistsOnStarboard(message))
            {
                if (_service.IsAboveReactionThreshold(reactionCount))
                {
                    await _service.ModifyEntry(channel.Guild, message, FormatContent(message, emote), GetEmbedColor(reactionCount));
                }
                else
                {
                    await _service.RemoveFromStarboard(channel.Guild, message);
                }
            }
            else if (_service.IsAboveReactionThreshold(reactionCount))
            {
                var embed = GetStarEmbed(message, GetEmbedColor(reactionCount));
                await _service.AddToStarboard(channel.Guild, message, FormatContent(message, emote), embed);
            }
        }
示例#2
0
        private string FormatContent(IUserMessage message, IEmote emote)
        {
            var reactionCount = _service.GetReactionCount(message, emote);

            return($"**{reactionCount}** {_service.GetStarEmote(reactionCount)}");
        }