public virtual InlineKeyboardMarkup RenderModerationInlineKeyboard(Strings strings) { InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup { InlineKeyboard = new List <List <InlineKeyboardButton> > { new List <InlineKeyboardButton> { InlineKeyboardButton.Create(EmojiStore.Done + " " + strings.GetString(Strings.StringsList.done), callbackData: "comm:options:" + this.ChatId + ":" + this.PollId) } } }; return(inlineKeyboard); }
protected virtual InlineKeyboardMarkup GenerateUserMarkup(Strings strings, string apikey) { string botname = Globals.Botname; if (delete) { return(null); } InlineKeyboardMarkup inline = new InlineKeyboardMarkup { InlineKeyboard = new List <List <InlineKeyboardButton> >() }; if (!closed) { inline.InlineKeyboard.Add(new List <InlineKeyboardButton> { InlineKeyboardButton.Create(strings.GetString(Strings.stringsList.publish), switchInlineQuery: pollText) }); if (pollType != EPolls.board) { inline.InlineKeyboard.Add(new List <InlineKeyboardButton> { InlineKeyboardButton.Create(strings.GetString(Strings.stringsList.publishWithLink), switchInlineQuery: "$c:" + pollText) }); inline.InlineKeyboard.Add(new List <InlineKeyboardButton> { InlineKeyboardButton.Create(strings.GetString(Strings.stringsList.buttonVote), callbackData: "comm:iwannavote:" + Cryptography.Encrypt(chatId + ":" + pollId, apikey)), InlineKeyboardButton.Create(strings.GetString(Strings.stringsList.commPageRefresh), callbackData: "comm:update:" + chatId + ":" + pollId) }); } else { inline.InlineKeyboard.Add(new List <InlineKeyboardButton> { InlineKeyboardButton.Create(strings.GetString(Strings.stringsList.buttonVote), url: "https://telegram.me/" + Globals.Botname + "bot?start=" + Cryptography.Encrypt("board:" + chatId + ":" + pollId, apikey)), InlineKeyboardButton.Create(strings.GetString(Strings.stringsList.commPageRefresh), callbackData: "comm:update:" + chatId + ":" + pollId) }); } } inline.InlineKeyboard.Add(new List <InlineKeyboardButton>() { InlineKeyboardButton.Create(strings.GetString(Strings.stringsList.commPageOptions), callbackData: "comm:options:" + chatId + ":" + pollId), InlineKeyboardButton.Create((closed ? strings.GetString(Strings.stringsList.commPageReopen) : strings.GetString(Strings.stringsList.commPageClose)), callbackData: "comm:" + (closed ? "reopen:" : "close:") + chatId + ":" + pollId), InlineKeyboardButton.Create(strings.GetString(Strings.stringsList.commPageDelete), callbackData: "comm:delete:" + chatId + ":" + pollId), }); return(inline); }
public override InlineKeyboardMarkup RenderInlineKeyboard(List <int> pollVotesCount, Strings strings, bool noApproximation, bool channel = false) { InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup(); inlineKeyboard.InlineKeyboard = new List <List <InlineKeyboardButton> >(); if (!closed && !delete) { inlineKeyboard.InlineKeyboard.Add(new List <InlineKeyboardButton>() { InlineKeyboardButton.Create(strings.GetString(Strings.StringsList.buttonVote), url: $"https://telegram.me/{ Globals.GlobalOptions.Botname }?start={ Cryptography.Encrypt($"board:{ ChatId.ToString() }:{ PollId.ToString() }") }") }); } return(inlineKeyboard); }
private static ContentParts prepare(Strings strings, Pointer pointer) { string text = strings.GetString(Strings.stringsList.setLanguage); InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup(); inlineKeyboard.InlineKeyboard = new List <List <InlineKeyboardButton> >(); var values = Enum.GetValues(typeof(Strings.langs)); int j = -1; for (int i = 1; i < values.Length; i++) { int wI = i - 1; if (wI % 2 == 0) { inlineKeyboard.InlineKeyboard.Add(new List <InlineKeyboardButton>()); j++; } inlineKeyboard.InlineKeyboard[j].Add(InlineKeyboardButton.Create(strings.GetLangName((Strings.langs)values.GetValue(i)) + (values.GetValue(i).Equals(pointer.Lang) ? " ✅" : ""), callbackData: ("comm:lang:" + values.GetValue(i)))); } inlineKeyboard.InlineKeyboard.Add(new List <InlineKeyboardButton> { InlineKeyboardButton.Create("\ud83d\udcbe " + strings.GetString(Strings.stringsList.done), callbackData: "comm:showWelcome") }); return(new ContentParts(text, inlineKeyboard, null)); }
ReplyMarkup GenerateOptionsMarkup(Strings strings) { InlineKeyboardMarkup inline = new InlineKeyboardMarkup { InlineKeyboard = new List <List <InlineKeyboardButton> >() }; bool moderate = Appendable; if (this.pollType != EPolls.board) { inline.InlineKeyboard.Add(new List <InlineKeyboardButton> { InlineKeyboardButton.Create(String.Format(strings.GetString(Strings.stringsList.optionsPercentageNone), (PercentageBar == PercentageBars.Bars.none).ToCheck()), callbackData: "comm:percentage:none:" + chatId + ":" + pollId), InlineKeyboardButton.Create(PercentageBars.GetIconArray(PercentageBars.Bars.dots).Implode() + " " + (PercentageBar == PercentageBars.Bars.dots).ToCheck(), callbackData: "comm:percentage:dots:" + chatId + ":" + pollId), InlineKeyboardButton.Create(PercentageBars.GetIconArray(PercentageBars.Bars.thumbs).Implode() + " " + (PercentageBar == PercentageBars.Bars.thumbs).ToCheck(), callbackData: "comm:percentage:thumbs:" + chatId + ":" + pollId), }); inline.InlineKeyboard.Add(new List <InlineKeyboardButton> { InlineKeyboardButton.Create(String.Format(strings.GetString(Strings.stringsList.optionsSorted), Sorted.ToCheck()), callbackData: "comm:sorted:" + chatId + ":" + pollId), }); inline.InlineKeyboard.Add(new List <InlineKeyboardButton> { InlineKeyboardButton.Create(String.Format(strings.GetString(Strings.stringsList.optionsAppendable), Appendable.ToCheck()), callbackData: "comm:appendable:" + chatId + ":" + pollId), }); } else { moderate = true; } if (moderate) { inline.InlineKeyboard.Add(new List <InlineKeyboardButton> { InlineKeyboardButton.Create("\ud83d\udd0d " + strings.GetString(Strings.stringsList.moderate), callbackData: "comm:moderate:" + chatId + ":" + pollId), }); } inline.InlineKeyboard.Add(new List <InlineKeyboardButton> { InlineKeyboardButton.Create("\ud83d\udcbe " + strings.GetString(Strings.stringsList.done), callbackData: "comm:update:" + chatId + ":" + pollId) }); return(inline); }
public async Task Update(List <Instance> instances, long currentBotChatID, Strings strings, bool noApproximation, string currentInlineMessageID = null, int?messageId = null, string currentText = null, long?newChatId = null, bool voteButtonPressed = false) { //If a user pressed the update button, the messageId is not null (so nobody voted) bool getsAVote = messageId == null; Instance currentInstance = instances.Find(x => x.chatID == currentBotChatID); string apikey = currentInstance.apikey; //Fully fledged poll ContentParts content = GetContent(strings, apikey, noApproximation: noApproximation); //Has only link buttons ContentParts contentChannel = GetContent(strings, apikey, noApproximation: noApproximation, channel: true); //Filters HTML-Tags from the new message to compare with the old message text (to reduce unecessary updates) Regex regex = new Regex("<[^>]*>"); if (currentText == null || regex.Replace(content.Text, "") != regex.Replace(currentText, "") || voteButtonPressed) { if (messageId != null) { //User voted in private chat and is not the poll owner if (newChatId != null && newChatId != this.chatId) { await Api.EditMessageTextAsync(apikey, strings.GetString(Strings.StringsList.votedSuccessfully), null, newChatId, messageId); getsAVote = true; //User requests to vote on his own poll } else if (voteButtonPressed) { await Api.EditMessageTextAsync(apikey, content.Text, content.InlineKeyboard, this.chatId, messageId); //Poll owner voted in private chat } else { await Api.EditMessageTextAsync(apikey, content.Text, GenerateUserMarkup(strings, apikey), this.chatId, messageId); getsAVote = true; } } //Refreshes all messages shared via inline mode if (getsAVote) { await RefreshInlineMessage(instances, currentBotChatID, content, contentChannel, currentInlineMessageID); } } }
public void Update(string apikey, Strings strings, int?messageId = null, string currentText = null, long?newChatId = null, bool vote = false) { bool getsAVote = messageId == null; ContentParts content = GetContent(strings, apikey); ContentParts contentChannel = GetContent(strings, apikey, true); Regex regex = new Regex("<[^>]*>"); if (currentText == null || regex.Replace(content.Text, "") != regex.Replace(currentText, "") || vote) { if (messageId != null) { if (newChatId != null && newChatId != chatId) { Api.EditMessageText(apikey, strings.GetString(Strings.stringsList.votedSuccessfully), null, newChatId, messageId); getsAVote = true; } else if (vote) { Api.EditMessageText(apikey, content.Text, content.InlineKeyboard, chatId, messageId); } else { Api.EditMessageText(apikey, content.Text, GenerateUserMarkup(strings, apikey), chatId, messageId); getsAVote = true; } } if (getsAVote) { foreach (MessageID messageID in messageIds) { if (messageID.channel) { Api.EditMessageText(apikey, contentChannel.Text, contentChannel.InlineKeyboard, inlineMessageId: messageID.inlineMessageId); } else { Api.EditMessageText(apikey, content.Text, content.InlineKeyboard, inlineMessageId: messageID.inlineMessageId); } } } } }
protected ContentParts GetPollOutputOld(Strings strings, int peopleCount, List <int> pollVotesCount, bool noApproximation, bool channel = false) { Strings.Langs oldLang = strings.CurrentLang; strings.SetLanguage(lang); string text; string inlineTitle = this.pollText; //TODO Make this pretty string inlineDescription; 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.GlobalOptions.Botname }?start={ Cryptography.Encrypt($"board:{ ChatId.ToString() }:{ PollId.ToString() }") }") }); } inlineDescription = 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; inlineDescription += x.Value.Text + ", "; } else { text += "\n▶️ <a href=\"https://telegram.me/" + Globals.GlobalOptions.Botname + "?start=" + Cryptography.Encrypt("pag:" + chatId + ":" + pollId + ":0") + "\">" + strings.GetString(Strings.StringsList.boardShowMore) + "</a>\n"; break; } } if (delete || closed) { inlineKeyboard = null; } inlineDescription = inlineDescription.Substring(0, inlineDescription.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 { * inlineDescription = ""; * 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, inlineTitle, inlineDescription)); }
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)); }
public static InlineKeyboardMarkup GetTheModerationKeyboard(Strings strings, long chatID, int pollID) { return(GetOneButtonMarkup(InlineKeyboardButton.Create(strings.GetString(Strings.StringsList.moderate), callbackData: String.Format("comm:moderate:{0}:{1}", chatID, pollID)))); }
internal async Task UpdateWithOptionsPane(string apikey, Strings strings, int messageID, string text) { ContentParts content = GetContent(strings, apikey, noApproximation: true); await Api.EditMessageTextAsync(apikey, "<b>" + HtmlSpecialChars.Encode(strings.GetString(Strings.StringsList.optionsForPoll)) + "</b>\n\n" + content.Text, this.GenerateOptionsMarkup(strings), chatId, messageID); }
public virtual string RenderExpansion(Strings strings) { return("<a href=\"" + "https://hamilton.wjclub.tk/" + Globals.GlobalOptions.Botname + "/" + Cryptography.Encrypt("lookup:" + this.ChatId + ":" + this.PollId, Globals.GlobalOptions.Apikey) + "\">\ud83c\udf0e " + strings.GetString(Strings.StringsList.viewInBrowserExpansion) + "</a>"); }
public virtual string RenderPeopleCount(Strings strings, int peopleCount, bool noApproximation) { return(string.Format(strings.GetString(peopleCount == 0 ? Strings.StringsList.rendererZeroVotedSoFar : (peopleCount == 1 ? Strings.StringsList.rendererSingleVotedSoFar : Strings.StringsList.rendererMultiVotedSoFar)), RenderNumberUpdateFriendly(peopleCount, noApproximation))); }
public override string RenderOptionalInsert(Strings strings) { return("ℹ️ " + string.Format(strings.GetString(Strings.StringsList.limitedDoodleYouCanChooseSoMany), MaxVotes, pollVotes.Count) + "\n"); }
internal void UpdateWithOptionsPane(string apikey, Strings strings, int messageID, string text) { ContentParts content = GetContent(strings, apikey); Api.EditMessageText(apikey, "<b>" + HtmlSpecialChars.Encode(strings.GetString(Strings.stringsList.optionsForPoll)) + "</b>\n\n" + content.Text, this.GenerateOptionsMarkup(strings), chatId, messageID); }
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)); }