Пример #1
0
        protected override ContentParts GetContent(Strings strings, string apikey, bool channel = false, int?offset = null, bool moderatePane = true)
        {
            Strings.langs oldLang = strings.CurrentLang;
            strings.SetLanguage(lang);
            string text;
            InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup();

            inlineKeyboard.InlineKeyboard = new List <List <InlineKeyboardButton> >();
            string description;

            {
                description = StringEdit.CurrentCulture.TextInfo.ToTitleCase(anony.ToString()) + " " + pollType + ": " + pollText + ": ";
                int optionCount = 0;
                text = "\ud83d\udcca <b>" + HtmlSpecialChars.Encode(pollText).UnmarkupUsernames() + "</b>" + (!string.IsNullOrEmpty(pollDescription) ? ("\n" + HtmlSpecialChars.Encode(pollDescription) + "\n") : "\n");
                foreach (KeyValuePair <string, List <User> > x in pollVotes)
                {
                    int votingUserCount = x.Value.Count;
                    text += "\n<b>" + HtmlSpecialChars.Encode(x.Key).UnmarkupUsernames() + "</b> [" + votingUserCount + "]\n";
                    if (anony == EAnony.personal)
                    {
                        if (x.Value.Count > 0)
                        {
                            User last = x.Value.Last();
                            foreach (User user in x.Value)
                            {
                                text += "\u200E" + (user == last ? "└" : "├") + " " + HtmlSpecialChars.Encode((user.FirstName + (user.LastName != null ? " " + user.LastName : "")).Replace("\u200F", "").Replace("\u202B", "").Replace("\u202E", "").Truncate(25)) + "\n";
                            }
                        }
                    }
                    if (!closed && !channel)
                    {
                        List <InlineKeyboardButton> thisRow = new List <InlineKeyboardButton>(1);
                        thisRow.Add((InlineKeyboardButton)InlineKeyboardButton.Create(x.Key + " - " + votingUserCount, callbackData: Cryptography.Encrypt(chatId + ":" + pollId + ":" + optionCount, apikey)));
                        inlineKeyboard.InlineKeyboard.Add(thisRow);
                    }
                    description += x.Key + ", ";
                    optionCount++;
                }
                description = description.Substring(0, description.Length - 2);
                int userCount = people.Count;
                if (channel)
                {
                    inlineKeyboard.InlineKeyboard.Add(new List <InlineKeyboardButton> {
                        InlineKeyboardButton.Create(strings.GetString(Strings.stringsList.buttonVote), url: "https://telegram.me/" + Globals.Botname + "bot?start=" + Cryptography.Encrypt("vote:" + ChatId.ToString() + ":" + PollId.ToString(), apikey))
                    });
                }
                text += "\n" + string.Format(strings.GetString(userCount == 0 ? Strings.stringsList.rendererZeroVotedSoFar : (userCount == 1 ? Strings.stringsList.rendererSingleVotedSoFar : Strings.stringsList.rendererMultiVotedSoFar)), userCount);
                if (delete || closed)
                {
                    inlineKeyboard = null;
                    text          += "\n" + strings.GetString(Strings.stringsList.pollClosed);
                }
            }
            strings.SetLanguage(oldLang);
            return(new ContentParts(text, inlineKeyboard, description));
        }
        protected override ContentParts GetContent(Strings strings, string apikey, bool channel = false, int?offset = default(int?), bool moderatePane = true)
        {
            ContentParts content = base.GetContent(strings, apikey, channel, offset);

            Strings.langs oldLang = strings.CurrentLang;
            strings.SetLanguage(this.lang);
            content.Text += "\nℹ️ " + string.Format(strings.GetString(Strings.stringsList.limitedDoodleYouCanChooseSoMany), MaxVotes, pollVotes.Count);
            strings.SetLanguage(oldLang);
            return(content);
        }
Пример #3
0
 public Doodle(int chatId, int pollId, string pollText, string pollDescription, EAnony anony, bool closed, PercentageBars.Bars percentageBar, bool appendable, bool sorted, bool archived, Dictionary <string, List <User> > pollVotes, List <MessageID> messageIds, List <User> people, DBHandler dBHandler, Strings.langs lang) : base(chatId, pollId, pollText, pollDescription, anony, closed, percentageBar, appendable, sorted, archived, dBHandler, pollVotes, messageIds, lang, EPolls.doodle)
 {
     this.people = people;
 }
Пример #4
0
 public Doodle(int chatId, int pollId, string pollText, EAnony anony, DBHandler dBHandler, Strings.langs lang) : this(chatId, pollId, pollText, null, anony, false, PercentageBars.Bars.none, false, false, false, new Dictionary <string, List <User> >(), new List <MessageID>(), new List <User>(), dBHandler, lang)
 {
 }
Пример #5
0
        protected override ContentParts GetContent(Strings strings, string apikey, bool channel = false, int?offset = null, bool moderatePane = true)
        {
            Strings.langs oldLang = strings.CurrentLang;
            strings.SetLanguage(lang);
            string text;
            InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup();

            inlineKeyboard.InlineKeyboard = new List <List <InlineKeyboardButton> >();
            string description = "";

            {
                int userCount           = 0;
                int optionCount         = 0;
                int percentageUserCount = 0;
                text = "\ud83d\udcca <b>" + HtmlSpecialChars.Encode(pollText).UnmarkupUsernames() + "</b>" + (!string.IsNullOrEmpty(pollDescription) ? ("\n" + HtmlSpecialChars.Encode(pollDescription) + "\n") : "\n");
                Dictionary <string, List <User> > newVotes;
                if (this.Sorted)
                {
                    newVotes = pollVotes.CloneDictionary();
                    newVotes = newVotes.Sort();
                }
                else
                {
                    newVotes = pollVotes;
                }
                if (this.PercentageBar != PercentageBars.Bars.none)
                {
                    foreach (KeyValuePair <string, List <User> > x in pollVotes)
                    {
                        percentageUserCount += x.Value.Count;
                    }
                }
                bool descTooLong = false;
                foreach (KeyValuePair <string, List <User> > x in newVotes)
                {
                    int votingUserCount = x.Value.Count;
                    text += String.Format("\n<b>{0}</b> [{1}]\n", HtmlSpecialChars.Encode(x.Key).UnmarkupUsernames(), votingUserCount);
                    if (anony == EAnony.personal)
                    {
                        if (x.Value.Count > 0)
                        {
                            if (PercentageBar != PercentageBars.Bars.none)
                            {
                                text += PercentageBars.RenderPercentage((double)x.Value.Count / percentageUserCount, this.PercentageBar, true);
                            }
                            User last = x.Value.Last();
                            foreach (User user in x.Value)
                            {
                                text += "\u200E" + (user == last ? "└" : "├") + " " + HtmlSpecialChars.Encode((user.FirstName + (user.LastName != null ? " " + user.LastName : "")).Replace("\u200F", "").Replace("\u202B", "").Replace("\u202E", "").Truncate(25)) + "\n";
                                userCount++;
                            }
                        }
                        else
                        {
                            if (PercentageBar != PercentageBars.Bars.none)
                            {
                                text += PercentageBars.RenderPercentage((double)x.Value.Count / percentageUserCount, this.PercentageBar);
                            }
                        }
                    }
                    else
                    {
                        if (PercentageBar != PercentageBars.Bars.none)
                        {
                            text += PercentageBars.RenderPercentage((double)x.Value.Count / percentageUserCount, this.PercentageBar);
                        }
                        userCount += x.Value.Count;
                    }
                    string unsortedKey = pollVotes.Keys.ElementAt(optionCount);
                    if (!closed && !channel)
                    {
                        List <InlineKeyboardButton> thisRow = new List <InlineKeyboardButton>(1);
                        thisRow.Add((InlineKeyboardButton)InlineKeyboardButton.Create(unsortedKey + " - " + pollVotes.Values.ElementAt(optionCount).Count, callbackData: Cryptography.Encrypt(chatId + ":" + pollId + ":" + optionCount, apikey)));
                        inlineKeyboard.InlineKeyboard.Add(thisRow);
                    }
                    if (description.Length < 150)
                    {
                        description += unsortedKey.Truncate(15) + " | ";
                    }
                    else
                    {
                        descTooLong = true;
                    }
                    optionCount++;
                }
                if (descTooLong)
                {
                    description += " | ...";
                }
                description = "Personal vote - " + userCount + " participants\n" + description;
                if (!closed && channel)
                {
                    inlineKeyboard.InlineKeyboard.Add(new List <InlineKeyboardButton> {
                        InlineKeyboardButton.Create(strings.GetString(Strings.stringsList.buttonVote), url: "https://telegram.me/" + Globals.Botname + "bot?start=" + Cryptography.Encrypt("vote:" + ChatId + ":" + PollId, apikey))
                    });
                }
                if (!closed && Appendable)
                {
                    inlineKeyboard.InlineKeyboard.Add(new List <InlineKeyboardButton> {
                        InlineKeyboardButton.Create(strings.GetString(Strings.stringsList.buttonAppend), url: "https://telegram.me/" + Globals.Botname + "bot?start=" + Cryptography.Encrypt("append:" + ChatId + ":" + PollId, apikey))
                    });
                }
                if (delete)
                {
                    inlineKeyboard = null;
                }
                description = description.Substring(0, description.Length - 3);
                text       += "\n" + string.Format(strings.GetString(userCount == 0 ? Strings.stringsList.rendererZeroVotedSoFar : (userCount == 1 ? Strings.stringsList.rendererSingleVotedSoFar : Strings.stringsList.rendererMultiVotedSoFar)), userCount);
                if (closed)
                {
                    text += "\n" + strings.GetString(Strings.stringsList.pollClosed);
                }
            }
            strings.SetLanguage(oldLang);
            return(new ContentParts(text, inlineKeyboard, description));
        }
Пример #6
0
 public PVote(int chatId, int pollId, string pollText, EAnony anony, DBHandler dBHandler, Strings.langs lang) : base(chatId, pollId, pollText, null, anony, false, PercentageBars.Bars.none, false, false, false, dBHandler, new Dictionary <string, List <User> >(), new List <MessageID>(), lang, EPolls.vote)
 {
 }
Пример #7
0
		public Pointer(int chatId, EPolls pollType, ENeedle needle, EAnony anony, int? boardChatId, int? boardPollId, int lastPollId, Strings.langs lang) {
			this.ChatId = chatId;
			this.PollType = pollType;
			this.Needle = needle;
			this.Anony = anony;
			this.BoardChatId = boardChatId;
			this.BoardPollId = boardPollId;
			this.LastPollId = lastPollId;
			this.Lang = lang;
		}
Пример #8
0
 protected Poll(int chatId, int pollId, string pollText, string pollDescription, EAnony anony, bool closed, PercentageBars.Bars percentageBar, bool appendable, bool sorted, bool archived, DBHandler dBHandler, Dictionary <string, List <User> > pollVotes, List <MessageID> messageIds, Strings.langs lang, EPolls pollType = EPolls.vote)
 {
     this.chatId          = chatId;
     this.pollId          = pollId;
     this.pollText        = pollText;
     this.pollDescription = pollDescription;
     this.anony           = anony;
     this.pollVotes       = pollVotes;
     this.messageIds      = messageIds;
     this.closed          = closed;
     this.archived        = archived;
     this.dBHandler       = dBHandler;
     this.pollType        = pollType;
     this.lang            = lang;
     this.PercentageBar   = percentageBar;
     this.Appendable      = appendable;
     this.Sorted          = sorted;
 }
Пример #9
0
        protected override ContentParts GetContent(Strings strings, string apikey, bool channel = false, int?offset = null, bool moderatePane = true)
        {
            Strings.langs oldLang = strings.CurrentLang;
            strings.SetLanguage(lang);
            string text;
            string description;
            InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup();

            inlineKeyboard.InlineKeyboard = new List <List <InlineKeyboardButton> >();
            if (offset == null)
            {
                if (!closed)
                {
                    inlineKeyboard.InlineKeyboard.Add(new List <InlineKeyboardButton>()
                    {
                        InlineKeyboardButton.Create(strings.GetString(Strings.stringsList.buttonVote), url: "https://telegram.me/" + Globals.Botname + "bot?start=" + Cryptography.Encrypt("board:" + ChatId.ToString() + ":" + PollId.ToString(), apikey))
                    });
                }
                //inlineKeyboard.InlineKeyboard.Add(new List<InlineKeyboardButton>() { InlineKeyboardButton.Create(strings.GetString(Strings.stringsList.buttonVote), url: "https://telegram.me/" + Globals.Botname + "bot?start=" + "board:" + ChatId + ":" + PollId) });
                description = StringEdit.CurrentCulture.TextInfo.ToTitleCase(anony.ToString()) + " " + pollType + ": " + pollText + ": ";
                text        = "\ud83d\udcdd <b>" + HtmlSpecialChars.Encode(pollText).UnmarkupUsernames() + "</b>" + (!string.IsNullOrEmpty(pollDescription) ? ("\n" + HtmlSpecialChars.Encode(pollDescription) + "\n") : "\n");
                foreach (KeyValuePair <int, BoardVote> x in pollVotes)
                {
                    string toAdd = (anony == EAnony.personal ? "\n\u200E<b>" + HtmlSpecialChars.Encode(x.Value.Name.Replace("\u200F", "").Replace("\u202B", "").Replace("\u202E", "").Truncate(25)) + ": </b>" : "\n\ud83d\udc64 ") + HtmlSpecialChars.Encode(x.Value.Text) + "\n";
                    if (text.Length + toAdd.Length <= 4000)
                    {
                        text        += toAdd;
                        description += x.Value.Text + ", ";
                    }
                    else
                    {
                        text += "\n▶️ <a href=\"https://telegram.me/" + Globals.Botname + "bot?start=" + Cryptography.Encrypt("pag:" + chatId + ":" + pollId + ":0", apikey) + "\">" + strings.GetString(Strings.stringsList.boardShowMore) + "</a>\n";
                        break;
                    }
                }
                if (delete || closed)
                {
                    inlineKeyboard = null;
                }
                description = description.Substring(0, description.Length - 2);
                text       += "\n" + string.Format(strings.GetString(pollVotes.Count == 0 ? Strings.stringsList.rendererZeroVotedSoFar : (pollVotes.Count == 1 ? Strings.stringsList.rendererSingleVotedSoFar : Strings.stringsList.rendererMultiVotedSoFar)), pollVotes.Count);
                if (closed)
                {
                    text += "\n" + strings.GetString(Strings.stringsList.pollClosed);
                }
            }
            else
            {
                description = "";
                if (offset < pollVotes.Count)
                {
                    int difference = (int)offset - (pollVotes.Count - 1);
                    text = "";
                    for (int i = (int)offset; i < offset + 5; i++)
                    {
                        try {
                            var x = pollVotes.ElementAt(i);
                            text += (anony == EAnony.personal ? "\u200E<b>" + HtmlSpecialChars.Encode(x.Value.Name.Replace("\u200F", "").Replace("\u202B", "").Replace("\u202E", "").Truncate(25)) + ": </b>" : "\ud83d\udc64 ") + HtmlSpecialChars.Encode(x.Value.Text) + "\n\n";
                        } catch (ArgumentOutOfRangeException) {
                            break;
                        }
                    }
                    inlineKeyboard.InlineKeyboard.Add(new List <InlineKeyboardButton> {
                        InlineKeyboardButton.Create("<<", callbackData: "comm:pag:" + chatId + ":" + pollId + ":" + (offset - 5 >= 0 ? (offset - 5) : 0)),
                        InlineKeyboardButton.Create(">>", callbackData: "comm:pag:" + chatId + ":" + pollId + ":" + (offset + 5 < pollVotes.Count ? (offset + 5) : pollVotes.Count - 1))
                    });
                    text += string.Format(strings.GetString(Strings.stringsList.boardPagBottomLine), (offset + 1), (pollVotes.Count - offset < 5 ? pollVotes.Count - (offset - 5) : (offset + 5)), pollVotes.Count);
                }
                else
                {
                    text = strings.GetString(Strings.stringsList.boardPagCantFind);
                }
            }
            strings.SetLanguage(oldLang);
            return(new ContentParts(text, inlineKeyboard, description));
        }
Пример #10
0
 public Board(int chatId, int pollId, string pollText, string pollDescription, EAnony anony, bool closed, bool archived, DBHandler dBHandler, Dictionary <int, BoardVote> pollVotes, List <MessageID> messageIds, Strings.langs lang) : base(chatId, pollId, pollText, pollDescription, anony, closed, PercentageBars.Bars.none, false, false, archived, dBHandler, null, messageIds, lang, EPolls.board)
 {
     this.pollVotes = pollVotes;
 }
Пример #11
0
 public Board(int chatId, int pollId, string pollText, EAnony anony, DBHandler dBHandler, Strings.langs lang) : this(chatId, pollId, pollText, null, anony, false, false, dBHandler, new Dictionary <int, BoardVote>(), new List <MessageID>(), lang)
 {
 }
 public LimitedDoodle(int chatId, int pollId, string pollText, EAnony anony, DBHandler dBHandler, Strings.langs lang) : base(chatId, pollId, pollText, anony, dBHandler, lang)
 {
     this.pollType = EPolls.limitedDoodle;
 }