Example #1
0
 private static async Task SetDiscCaptionAsync(long chat, int from)
 {
     await bot.EditMessageCaptionAsync(chat,
                                       db.GetEditMessageId(from),
                                       caption : db.GetCaption(from, true),
                                       replyMarkup : IReplies.editKeyboard(db.GetOfferPlatform(from)));
 }
Example #2
0
        private static async void Bot_OnCallbackQuery(object sender, Telegram.Bot.Args.CallbackQueryEventArgs e)
        {
            var data    = e.CallbackQuery.Data;
            var message = e.CallbackQuery.Message;

            log.Query(e);

            try
            {
                switch (data)
                {
                default:
                    return;

                case "🛒 Связаться с продавцом 🛒":
                    string seller = db.GetUserPhone(e.CallbackQuery.From.Id);
                    if (seller[0] == '+')
                    {
                        await bot.SendContactAsync(e.CallbackQuery.From.Id, seller, "Продавец");
                    }
                    else
                    {
                        await bot.SendTextMessageAsync(e.CallbackQuery.From.Id, '@' + seller);
                    }
                    return;

                case "⭐️ В избранное ⭐️":
                    db.AddSelectedOfferToFavorites(e.CallbackQuery.From.Id);
                    return;

                case "PS4 ⚪️":
                    db.SetPlatform(0, e.CallbackQuery.From.Id, true);
                    break;

                case "Xbox ⚪️":
                    db.SetPlatform(1, e.CallbackQuery.From.Id, true);
                    break;

                case "Switch ⚪️":
                    db.SetPlatform(2, e.CallbackQuery.From.Id, true);
                    break;

                case "Изменить название":
                    await bot.AnswerCallbackQueryAsync(e.CallbackQuery.Id,
                                                       "Отправьте название игры в следующем сообщении.", true);

                    db.SetAwaitInfoType(e.CallbackQuery.From.Id, (int)awaitInfoType.name);
                    return;

                case "Указать цену":
                    await bot.AnswerCallbackQueryAsync(e.CallbackQuery.Id,
                                                       "Отправьте цену игры в следующем сообщении.", true);

                    db.SetAwaitInfoType(e.CallbackQuery.From.Id, (int)awaitInfoType.price);
                    return;

                case "Обмен":
                    if (db.GetExchange(e.CallbackQuery.From.Id, true) != "")
                    {
                        db.SetExchange("", e.CallbackQuery.From.Id, true);
                        break;
                    }
                    else
                    {
                        await bot.AnswerCallbackQueryAsync(e.CallbackQuery.Id,
                                                           "Отправьте названия желаемых игр в следующем сообщении.", true);

                        db.SetAwaitInfoType(e.CallbackQuery.From.Id, (int)awaitInfoType.exchange);
                        return;
                    }

                case "Загрузить фото":
                    await bot.AnswerCallbackQueryAsync(e.CallbackQuery.Id,
                                                       "Отправьте фотогрфию в следующем сообщении.", true);

                    db.SetAwaitInfoType(e.CallbackQuery.From.Id, (int)awaitInfoType.photo);
                    return;

                case "✅ Сохранить ✅":
                    await bot.DeleteMessageAsync(e.CallbackQuery.Message.Chat.Id, db.GetEditMessageId(e.CallbackQuery.From.Id));

                    await bot.SendTextMessageAsync(e.CallbackQuery.Message.Chat.Id, "✅ Товар добавлен!\n\nℹ️ Чтобы просмотреть список ваших товаров, выберите пункт \"Мои товары\".");

                    return;

                case "❌ Удалить ❌":
                    db.DeleteOffer(e.CallbackQuery.From.Id);
                    await bot.DeleteMessageAsync(e.CallbackQuery.Message.Chat.Id, db.GetEditMessageId(e.CallbackQuery.From.Id));

                    await bot.SendTextMessageAsync(e.CallbackQuery.Message.Chat.Id, "✅ Товар удален!\n\nℹ️ Чтобы просмотреть список ваших товаров, выберите пункт \"Мои товары\".");

                    return;

                case "❌ Удалить из избранного ❌":
                    db.DeleteOfferFromFav(db.GetEditOfferId(e.CallbackQuery.From.Id));
                    await bot.DeleteMessageAsync(e.CallbackQuery.Message.Chat.Id, db.GetEditMessageId(e.CallbackQuery.From.Id));

                    await bot.SendTextMessageAsync(e.CallbackQuery.Message.Chat.Id, "✅ Товар удален из избранного!\n\nℹ️ Чтобы просмотреть список избранного, выберите пункт \"Избранное\".");

                    return;
                }
                await bot.EditMessageCaptionAsync(message.Chat.Id,
                                                  message.MessageId,
                                                  caption : db.GetCaption(e.CallbackQuery.From.Id, true),
                                                  replyMarkup : IReplies.editKeyboard(db.GetOfferPlatform(e.CallbackQuery.From.Id)));
            }
            catch (Exception e3)
            {
                log.Error(e3.Message);
                return;
            }
        }
Example #3
0
        private static async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            // return;
            var text    = e.Message.Text;
            var message = e.Message;

            log.Message(e);
            //if (e.Message.From.Id == 652761067)
            //    return;
            try
            {
                if (message.Type == Telegram.Bot.Types.Enums.MessageType.Contact)
                {
                    db.SetUserPhone(message.From.Id, message.Contact.PhoneNumber);
                }
                switch (message.Text)
                {
                default:
                    switch (db.GetAwaitInfoType(message.From.Id))
                    {
                    case 0:
                        break;

                    case (int)awaitInfoType.name:
                        db.SetName(text, message.From.Id, true);
                        db.SetAwaitInfoType(message.From.Id, (int)awaitInfoType.none);
                        await SetDiscCaptionAsync(message.Chat.Id, message.From.Id);

                        break;

                    case (int)awaitInfoType.price:
                        db.SetPrice(message.Text, message.From.Id, true);
                        db.SetAwaitInfoType(message.From.Id, (int)awaitInfoType.none);
                        await SetDiscCaptionAsync(message.Chat.Id, message.From.Id);

                        break;

                    case (int)awaitInfoType.exchange:
                        db.SetExchange(text, message.From.Id, true);
                        db.SetAwaitInfoType(message.From.Id, (int)awaitInfoType.none);
                        await SetDiscCaptionAsync(message.Chat.Id, message.From.Id);

                        break;

                    case (int)awaitInfoType.location:
                        db.SetAwaitInfoType(message.From.Id, (int)awaitInfoType.none);
                        db.SetLocation(text, message.From.Id);
                        await bot.SendTextMessageAsync(message.From.Id, $"Профиль создан.",
                                                       replyMarkup : IReplies.keyboards.main);

                        Console.WriteLine();
                        return;

                    case (int)awaitInfoType.photo:
                        if (message.Photo == null)
                        {
                            break;
                        }
                        string photo = message.Photo[message.Photo.Length - 1].FileId;
                        db.SetPhoto(photo, message.From.Id, true);
                        await bot.EditMessageMediaAsync(
                            chatId : message.Chat.Id,
                            messageId : db.GetEditMessageId(message.From.Id),
                            media : new Telegram.Bot.Types.InputMediaPhoto(photo));
                        await SetDiscCaptionAsync(message.Chat.Id, message.From.Id);

                        break;

                    case (int)awaitInfoType.discNumber:
                        db.SetAwaitInfoType(message.From.Id, (int)awaitInfoType.none);
                        var temp1 = await bot.SendPhotoAsync(message.Chat.Id, db.GetPhotoForList(message.From.Id, Convert.ToInt32(message.Text)),
                                                             caption : db.GetSelectedFromListOffer(message.From.Id, Convert.ToInt32(message.Text)),
                                                             replyMarkup : IReplies.editKeyboard(db.GetOfferPlatform(message.From.Id)));

                        db.SetEditMessageId(message.From.Id, temp1.MessageId);
                        break;

                    case (int)awaitInfoType.searchResult:
                        db.SetAwaitInfoType(message.From.Id, (int)awaitInfoType.none);
                        int discId = Convert.ToInt32(message.Text.Substring(5).Split(':')[0]);
                        db.SetSelectedOffer(message.From.Id, discId);
                        await bot.SendPhotoAsync(message.Chat.Id, db.GetPhoto(discId),
                                                 caption : db.GetCaption(discId),
                                                 replyMarkup : IReplies.discKeyboard());

                        break;

                    case (int)awaitInfoType.favNumber:
                        if (Convert.ToInt32(message.Text) > db.GetAmountOfFav(message.From.Id) || Convert.ToInt32(message.Text) < 1)
                        {
                            break;
                        }

                        db.SetAwaitInfoType(message.From.Id, (int)awaitInfoType.none);
                        int ownerId = db.GetOwnerId(db.GetSelectedOffer(message.From.Id));
                        var temp2   = await bot.SendPhotoAsync(message.Chat.Id, db.GetPhoto(db.GetFavDisc(message.From.Id, Convert.ToInt32(message.Text))),
                                                               caption : db.GetSelectedFromFav(db.GetFavDisc(message.From.Id, Convert.ToInt32(message.Text))),
                                                               replyMarkup : IReplies.favKeyboard());

                        db.SetEditMessageId(message.From.Id, temp2.MessageId);
                        db.SetEditOfferId(message.From.Id, db.GetFavDisc(message.From.Id, Convert.ToInt32(message.Text)));
                        break;

                    default:
                        Console.WriteLine("Unprocessed message found. Deleted.".Pastel(Color.Gold));
                        break;
                    }
                    await bot.DeleteMessageAsync(e.Message.Chat.Id, e.Message.MessageId);

                    return;

                case "/start":
                    db.NewUser(message.From.Id, message.From.Username);
                    await bot.SendTextMessageAsync(message.From.Id, $"Привет {message.From.Username}, это бот по обмену дисками!");

                    await bot.SendTextMessageAsync(message.From.Id, $"Пожалуйста, введите ваш город проживания:");

                    db.SetAwaitInfoType(message.From.Id, (int)awaitInfoType.location);
                    break;

                case "/keyboard":
                    await bot.SendTextMessageAsync(message.Chat.Id, "Выберите опцию из меню ниже:",
                                                   replyMarkup : IReplies.keyboards.main);

                    break;

                case "Назад ↩️":
                    await bot.SendTextMessageAsync(message.Chat.Id, "Выберите опцию из меню ниже:",
                                                   replyMarkup : IReplies.keyboards.main);

                    break;

                case "Контакты 📱":
                    await bot.SendTextMessageAsync(message.Chat.Id, "Выберите опцию из меню ниже:",
                                                   replyMarkup : IReplies.keyboards.contact);

                    break;

                case "Помощь ❓":
                    await bot.SendTextMessageAsync(message.Chat.Id, "Выберите опцию из меню ниже:",
                                                   replyMarkup : IReplies.keyboards.help);

                    break;

                case "Поиск 🔎":
                    await bot.SendTextMessageAsync(message.Chat.Id, "Чтобы начать поиск игр, нажмите на кнопку ниже:",
                                                   replyMarkup : IReplies.keyboards.search);

                    break;

                case "Мой профиль 👤":
                    await bot.SendTextMessageAsync(message.Chat.Id, "Выберите опцию из меню ниже:",
                                                   replyMarkup : IReplies.keyboards.profile);

                    break;

                case "Мои товары 💿":
                    if (db.UserHasOffers(message.From.Id))
                    {
                        await bot.SendTextMessageAsync(message.Chat.Id, db.GetUserOffers(message.From.Id));

                        db.SetAwaitInfoType(message.From.Id, (int)awaitInfoType.discNumber);
                    }
                    else
                    {
                        await bot.SendTextMessageAsync(message.Chat.Id, "У вас нет созданных дисков:",
                                                       replyMarkup : IReplies.keyboards.profile);

                        db.SetAwaitInfoType(message.From.Id, (int)awaitInfoType.none);
                    }
                    break;

                case "Добавить товар 💿":
                    if (e.Message.From.Username == null && db.GetUserPhone(message.From.Id) == "")
                    {
                        await bot.SendTextMessageAsync(e.Message.Chat.Id, "ℹ️ Не удалось получить ваш никнейм.\n\n" +
                                                       "Чтобы покупатель мог связатся с вами, добавьте свой номер телефона в настройках профиля.\n" +
                                                       "Вы также можете создать свой никнейм и повторить попытку.");

                        return;
                    }
                    db.NewOffer(message.From.Id);
                    var temp = await bot.SendPhotoAsync(message.Chat.Id, "AgACAgIAAxkBAAIGZF9aSti3CZNeKoW3AjRGDco3-45KAAL3rjEb0L7RSjbSrDV25SE0ECFzly4AAwEAAwIAA3gAA3CNAAIbBA",
                                                        caption : db.GetCaption(message.From.Id, true),
                                                        replyMarkup : IReplies.editKeyboard(db.GetOfferPlatform(message.From.Id)));

                    db.SetEditMessageId(message.From.Id, temp.MessageId);
                    break;

                case "Избранное 🌟":
                    if (db.UserHasFav(message.From.Id))
                    {
                        await bot.SendTextMessageAsync(message.Chat.Id, db.GetUserFav(message.From.Id));

                        db.SetAwaitInfoType(message.From.Id, (int)awaitInfoType.favNumber);
                    }
                    else
                    {
                        db.SetAwaitInfoType(message.From.Id, (int)awaitInfoType.none);
                        await bot.SendTextMessageAsync(message.Chat.Id, "У вас нет избранных товаров",
                                                       replyMarkup : IReplies.keyboards.main);
                    }
                    break;
                }
            }
            catch (MessageIsNotModifiedException e1)
            {
                log.Error(e1.Message);
                return;
            }
            catch (FormatException e2)
            {
                log.Error(e2.Message);
                return;
            }
            catch (ApiRequestException e4)
            {
                log.Error(e4.Message);
                return;
            }
            catch (System.Net.Http.HttpRequestException e3)
            {
                log.Error(e3.Message);
                await bot.GetUpdatesAsync();

                return;
            }
        }