private static string AddMessageReactionHTMLWithEmojiPack(
            NKDiscordChatWidget.DiscordBot.Classes.EventMessageCreate.EventMessageCreate_Reaction reaction,
            EmojiPackType emojiPack
            )
        {
            var longs = Utf8ToUnicode.ToUnicodeCode(reaction.emoji.name);
            var u     = longs.Any(code => !UnicodeEmojiEngine.IsInIntervalEmoji(code, emojiPack));

            if (u)
            {
                // Реакция без ID, но при этом не является эмодзи, рисуем как есть
                return(HttpUtility.HtmlEncode(reaction.emoji.name));
            }

            // Реакция без ID и является эмодзи, поэтому рисуем как картинку
            var localEmojiList = UnicodeEmojiEngine.RenderEmojiAsStringList(
                emojiPack, longs);
            var emojiHtml = "";

            // ReSharper disable once LoopCanBeConvertedToQuery
            foreach (var item in localEmojiList)
            {
                if (!item.isSuccess)
                {
                    // Этого символа нет в паке, выводим как есть. Куда деваться
                    emojiHtml += HttpUtility.HtmlEncode(item.rawText);
                    continue;
                }

                // hint: localEmojiList.Count может быть больше 1 в случае сложных эмодзи типа :one:
                var emojiSubFolderName = UnicodeEmojiEngine.GetImageSubFolder(emojiPack);
                var emojiExtension     = UnicodeEmojiEngine.GetImageExtension(emojiPack);
                var url = string.Format("/images/emoji/{0}/{1}.{2}",
                                        emojiSubFolderName,
                                        item.emojiCode,
                                        emojiExtension
                                        );

                emojiHtml += string.Format("<img src='{0}' alt=':{1}:'>",
                                           HttpUtility.HtmlEncode(url),
                                           HttpUtility.HtmlEncode(reaction.emoji.name)
                                           );
            }

            return(emojiHtml);
        }
        private static void AddMessageReactionHTML(
            ICollection <string> reactionHTMLs,
            NKDiscordChatWidget.DiscordBot.Classes.EventMessageCreate.EventMessageCreate_Reaction reaction,
            int emojiShow,
            ChatDrawOption chatOption
            )
        {
            if (reaction.emoji.id != null)
            {
                // Эмодзи из Дискорда (паки эмодзей с серверов)
                reactionHTMLs.Add(string.Format(
                                      "<div class='emoji {2}'><img src='{0}' alt=':{1}:'><span class='count'>{3}</span></div>",
                                      HttpUtility.HtmlEncode(reaction.emoji.URL),
                                      HttpUtility.HtmlEncode(reaction.emoji.name),
                                      (emojiShow == 1) ? "blur" : "",
                                      reaction.count
                                      ));
            }
            else
            {
                // Стандартные Unicode-эмодзи
                string emojiHtml;
                var    emojiPack = chatOption.unicode_emoji_displaying;
                // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression
                if (emojiPack != EmojiPackType.StandardOS)
                {
                    emojiHtml = AddMessageReactionHTMLWithEmojiPack(reaction, emojiPack);
                }
                else
                {
                    emojiHtml = HttpUtility.HtmlEncode(reaction.emoji.name);
                }

                reactionHTMLs.Add(string.Format(
                                      "<div class='emoji {1}'>{0}<span class='count'>{2}</span></div>",
                                      emojiHtml,
                                      (emojiShow == 1) ? "blur" : "",
                                      reaction.count
                                      ));
            }
        }