Пример #1
0
        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;
                }
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }