private void ProcessCommands(HockeyChat chat, int?replyId) { var commands = chat.CommandsQueue; while (commands.Count > 0) { var command = commands.Dequeue(); if (command.Cmd == "vote") { AddPoll(chat, command.Arg); continue; } if (command.Cmd == "pay") { AddPay(chat, command.Arg); continue; } if (command.Cmd == "add" || command.Cmd == "del") { OnPollMessage.Invoke(this, new PollMessageEventArgs(command.Cmd, command.Arg, chat, replyId == null ? 0 : (int)replyId)); continue; } } }
private static async void UpdatePaymentBoard(HockeyChat chat, int paymentBoardMsgId, Telegram.Bot.Types.User user, int totalAmount, string OrderName) { if (chat.Payments == null) { chat.Payments = new List <HockeyPayment>(); } var payment = chat.Payments.FindLast(x => x.MessageId == paymentBoardMsgId); if (payment == null) { payment = new HockeyPayment() { MessageId = paymentBoardMsgId, Payers = new List <Payer>(), Name = OrderName }; chat.Payments.Add(payment); } var payer = new Payer(paymentBoardMsgId, user.Id, user.Username, user.FirstName, user.LastName, totalAmount); payment.Payers.Add(payer); try { await _bot.EditMessageTextAsync(chat.Id, payment.MessageId, payment.Report, parseMode : Telegram.Bot.Types.Enums.ParseMode.Markdown); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
internal async void RenderPoll(HockeyChat chat, int messageId) { var poll = chat.Polls.FindLast(x => x.MessageId == messageId); if (poll == null) { return; } _currentPoll = poll; var noCnt = poll.Votes.Count(x => x.Data == "Не"); var yesCnt = poll.Votes.Count(x => x.Data == "Да"); try { await _bot.EditMessageTextAsync(chat.Id, messageId, poll.Report, parseMode : ParseMode.Markdown, replyMarkup : new InlineKeyboardMarkup(new[] { new InlineKeyboardButton { Text = $"Да – {yesCnt}", CallbackData = "Да" }, new InlineKeyboardButton { Text = $"Не – {noCnt}", CallbackData = "Не" } })); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
internal void UpdatePoll(HockeyChat chat, int msgid, CallbackQuery e) { var poll = chat.Polls.FindLast(x => x.MessageId == msgid); if (poll == null) { return; } _currentPoll = poll; var user = e.From; var player = _db.GetPlayerByUserid(user.Id); var vote = new Vote(msgid, user.Id, user.Username, player == null ? user.FirstName : player.Name, player == null ? user.LastName : player.Surname, e.Data); var voteDupl = poll.Votes.FindLast(x => x.TelegramUserId == vote.TelegramUserId); if (voteDupl != null) { if (voteDupl.Data == vote.Data) { return; } voteDupl.Data = vote.Data; _db.UpdateVoteData(msgid, vote.TelegramUserId, vote.Data); } else { AddVoteToPoll(poll, vote); } }
private static HockeyChat RestoreChatById(long chatId) { var chat = Chats.FindLast(c => c.Id == chatId); if (chat == null) { chat = new HockeyChat(chatId); Chats.Add(chat); } return(chat); }
private static void RestorePaymentFromDb(int messageId, HockeyChat chat) { var payment = _db.GetPaymentByMessageId(messageId); if (payment == null) { return; } chat.Payments.Add(payment); payment.Payers = _db.GetPayersByMessageId(messageId); Console.WriteLine("Payment restored from DB: " + payment.Name); }
private static void RestorePollFromDb(int messageId, HockeyChat chat) { var poll = _db.GetPollByMessageId(messageId); if (poll == null) { return; } chat.Polls.Add(poll); poll.Votes = _db.GetVotesByMessageId(messageId); Console.WriteLine("Poll restored from DB: " + poll.Question); }
public void ParseCommand(string msg, HockeyChat chat, int?replyId) { var msgSplitted = msg.Split(' '); if (msgSplitted.Length < 2) { return; } var cmd = msgSplitted.First().ToLower(); var arg = msg.Substring(cmd.Length + 1); chat.CommandsQueue.Enqueue(new Command() { Cmd = cmd, Arg = arg }); ProcessCommands(chat, replyId); }
private async void AddPay(HockeyChat chat, string arg) { var msg = await _bot.SendTextMessageAsync(chat.Id, $"{arg}"); var payment = new HockeyPayment() { MessageId = msg.MessageId, Payers = new List <Payer>(), Name = arg }; var payload = $"{chat.Id};{msg.MessageId}"; var prices = new List <Telegram.Bot.Types.Payments.LabeledPrice>() { new Telegram.Bot.Types.Payments.LabeledPrice("Traktorista", 30000) }; await _bot.SendInvoiceAsync(chat.Id, arg, "Да не обеднеет рука дающего", payload, Config.UkassaToken, "sasality", "RUB", prices); chat.Payments.Add(payment); }
private async void AddPoll(HockeyChat chat, string arg) { chat.VoteMode = false; var btnYes = new InlineKeyboardButton { Text = "Да", CallbackData = "Да" }; var btnNo = new InlineKeyboardButton { Text = "Не", CallbackData = "Не" }; var btnShow = new InlineKeyboardButton { Text = "Показать результаты", CallbackData = "Show" }; var keyboard = new InlineKeyboardMarkup(new[] { new [] { btnYes, btnNo }, new[] { btnShow } }); var msg = await _bot.SendTextMessageAsync(chat.Id, $"{arg}", replyMarkup : keyboard); var v = new List <Vote>(); var poll = new HockeyPoll() { MessageId = msg.MessageId, Votes = v, Question = arg }; _currentPoll = poll; _db.AddPoll(poll); var addedPoll = _db.GetPollByMessageId(poll.MessageId); poll.Id = addedPoll.Id; chat.Polls.Add(poll); }