示例#1
0
        public override async Task ExecuteAsync(Message message, TelegramBotClient botClient)
        {
            var chatId = (int)message.Chat.Id;

            using (TelegramContext db = new TelegramContext())
            {
                var User = db.Users.Where(p => p.Id == message.From.Id).SingleOrDefault();
                if (User == null)
                {
                    User user = new User {
                        Id = chatId, Name = message.From.Username
                    };
                    UserState us = new UserState {
                        User = user, State = (int)UserStatesEnum.Empty, LastMessageId = message.MessageId
                    };
                    db.Users.Add(user);
                    db.UserStates.Add(us);
                    db.SaveChanges();

                    UserLocker.AddUser(chatId);
                    UserLocker.LockUser(chatId);
                }

                VacanciesManager.MainMenu(message, botClient);
            }
        }
示例#2
0
        public override async Task ExecuteAsync(Message message, TelegramBotClient botClient)
        {
            var chatId = message.Chat.Id;

            using (TelegramContext db = new TelegramContext())
            {
                var User = db.Users.Where(p => p.UserId == message.From.Id).SingleOrDefault();
                if (User == null)
                {
                    ObjectsModels.User user = new ObjectsModels.User {
                        UserId = message.From.Id, Name = message.From.Username
                    };
                    ObjectsModels.UserState US = new ObjectsModels.UserState {
                        UserId = message.From.Id, State = (int)UserStatesEnum.Empty
                    };
                    db.Users.Add(user);
                    db.UserStates.Add(US);
                    db.SaveChanges();
                    BuildingsManager.MainMenu(user, db, message, botClient);
                }
                else
                {
                    BuildingsManager.MainMenu(User, db, message, botClient);
                }
            }
        }
示例#3
0
        public static void ActionStateSelected(UserState userState,
                                               TelegramContext db,
                                               Telegram.Bot.TelegramBotClient botClient,
                                               Update update)
        {
            switch (userState.State)
            {
            case (int)UserStatesEnum.Empty:    //Empty
                break;

            case (int)UserStatesEnum.AddBuildingName:    //AddCourse
                BuildingsManager.AddBuildingName(botClient, db, update.Message);
                break;

            case (int)UserStatesEnum.AddBuildingAddress:    //CoursesList
                BuildingsManager.AddBuildingAddress(botClient, db, update.Message, userState);
                break;

            case (int)UserStatesEnum.AddBuildingComment:    //AddCourseName
                BuildingsManager.AddBuildingComment(botClient, db, update.Message, userState);
                break;

            case (int)UserStatesEnum.AddBuildingPhoto:    //AddCourseName
                FilesManager.SaveFile(botClient, update.Message, userState.BuildingId);
                break;
            }
        }
示例#4
0
        private static async Task AddOrUpdateLocation(int id, GoogleAddress address)
        {
            using (var telegramContext = new TelegramContext())
            {
                await telegramContext.Database.EnsureCreatedAsync();

                var locationProfile = await telegramContext.UserLocations.FindAsync(id);

                if (locationProfile != null)
                {
                    locationProfile.Latitude         = address.Coordinates.Latitude;
                    locationProfile.Longitude        = address.Coordinates.Longitude;
                    locationProfile.FormattedAddress = address.FormattedAddress;
                    locationProfile.IsAmerica        = address.IsAmerica();
                }
                else
                {
                    await telegramContext.UserLocations.AddAsync(
                        new UserLocation
                    {
                        Id               = id,
                        Latitude         = address.Coordinates.Latitude,
                        Longitude        = address.Coordinates.Longitude,
                        FormattedAddress = address.FormattedAddress,
                        IsAmerica        = address.IsAmerica()
                    }
                        );
                }

                await telegramContext.SaveChangesAsync();
            }
        }
示例#5
0
        public static async void SaveFile(TelegramBotClient botClient, Message message, int buildingId)
        {
            if (message.Document != null)
            {
                using (TelegramContext db = new TelegramContext())
                {
                    DataFile LessonsData = new DataFile {
                        FileId = message.Document.FileId, Name = message.Document.FileId + "Build", BuildingId = buildingId
                    };
                    await db.DataFiles.AddAsync(LessonsData);

                    await db.SaveChangesAsync();
                }
            }
            else if (message.Photo != null && message.Photo.Count() > 0)
            {
                using (TelegramContext db = new TelegramContext())
                {
                    DataFile LessonsData = new DataFile {
                        FileId = message.Photo[1].FileId, Name = "Photo" + message.Photo[1].FileId, BuildingId = buildingId
                    };
                    await db.DataFiles.AddAsync(LessonsData);

                    await db.SaveChangesAsync();
                }
            }
            else
            {
                //await botClient.SendTextMessageAsync(message.Chat.Id, "Отправте следующий файл, или введите одну из команд!", Telegram.Bot.Types.Enums.ParseMode.Default);
            }
        }
        public async Task SendNewsletter()
        {
            if (MessageCommand.Parameters.Count != 1)
            {
                await ReplyTextMessageAsync("Usage:\n/send_newsletter <newsletter>");

                return;
            }

            var newsletterKey = MessageCommand.Parameters[0];
            var newsletter    = await _newsletterService.GetNewsletterByKeyAsync(newsletterKey);

            if (newsletter != null)
            {
                TelegramChat !.State       = SendingNewsletterState;
                TelegramChat["newsletter"] = newsletterKey;
                await ReplyTextMessageAsync("Ok, now send me the text formatted as HTML");

                await TelegramContext.SaveChangesAsync();
            }
            else
            {
                await ReplyTextMessageAsync(
                    $"The newsletter {newsletterKey} doesn't exist.\n" +
                    $"Use /create_newsletter {newsletterKey} - to create it");
            }
        }
示例#7
0
 public static void StateControl(Telegram.Bot.TelegramBotClient botClient, Update update)
 {
     using (TelegramContext db = new TelegramContext())
     {
         var userState = db.UserStates.Where(x => x.User.Id == update.Message.From.Id).SingleOrDefault();
         ActionStateSelected(userState, db, botClient, update);
     }
 }
        public async Task Setup()
        {
            TelegramChat.Role = ChatRole.Administrator;
            await _newsletterService.CreateNewsletterAsync(new Newsletter("default", "The default newsletter."));

            await TelegramContext.SaveChangesAsync();

            await ReplyTextMessageAsync("Done");
        }
示例#9
0
 public TelegramServer(IConfiguration configuration, TelegramContext telegramContext, Dispatcher dispatcher, MqContext mqContext)
 {
     this.configuration   = configuration;
     this.telegramContext = telegramContext;
     this.dispatcher      = dispatcher;
     this.mqContext       = mqContext;
     mqConsumer           = CreateEventConsumer();
     mqConsumer.Received += OnMqMessageReceived;
 }
示例#10
0
 public void Start()
 {
     Context = new TelegramContext();
     if (First)
     {
         //Context.Database.EnsureDeleted();
         First = false;
     }
     Context.Database.EnsureCreated();
 }
示例#11
0
 public static void StateUpdate(long userId, int state)
 {
     using (TelegramContext db = new TelegramContext())
     {
         var userState = db.UserStates.Where(x => x.User.Id == userId).SingleOrDefault();
         userState.State = state;
         db.UserStates.Update(userState);
         db.SaveChanges();
     }
 }
        public bool Add(TelegramContext context)
        {
            var user = context.Users.FirstOrDefault(u => u.Id == Id);

            if (user != null)
            {
                return(false);
            }
            context.Add(this);
            return(true);
        }
 public TelegramIntegrationEventService(
     ILogger <TelegramIntegrationEventService> logger,
     IEventBus eventBus,
     TelegramContext telegramContext,
     Func <DbConnection, IIntegrationEventLogService> integrationEventLogServiceFactory)
 {
     _logger          = logger ?? throw new ArgumentNullException(nameof(logger));
     _telegramContext = telegramContext ?? throw new ArgumentNullException(nameof(telegramContext));
     _integrationEventLogServiceFactory = integrationEventLogServiceFactory ?? throw new ArgumentNullException(nameof(integrationEventLogServiceFactory));
     _eventBus        = eventBus ?? throw new ArgumentNullException(nameof(eventBus));
     _eventLogService = _integrationEventLogServiceFactory(_telegramContext.Database.GetDbConnection());
 }
示例#14
0
 public static async void AddBuilding(TelegramBotClient botClient, TelegramContext db, Message message)
 {
     try
     {
         StateManager.StateUpdate(message.Chat.Id, (int)UserStatesEnum.AddBuildingName);
         await botClient.SendTextMessageAsync(message.Chat.Id, "Введи назву будівлі", Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0);
     }
     catch (Exception ex)
     {
         await botClient.SendTextMessageAsync(message.Chat.Id, "Ошибка: " + ex.Message, Telegram.Bot.Types.Enums.ParseMode.Default);
     }
 }
        public async Task <bool> AddAsync(TelegramContext context)
        {
            var user = await context.Users.FirstOrDefaultAsync(u => u.Id == Id);

            if (user != null)
            {
                return(false);
            }
            await context.AddAsync(this);

            return(true);
        }
示例#16
0
        private static async Task <string> GetUsername(int id)
        {
            using (var context = new TelegramContext())
            {
                await context.Database.EnsureCreatedAsync();

                var profile = await context.UserProfiles.FindAsync(id);


                return(profile?.LastFm);
            }
        }
示例#17
0
 public static async void SetLastMessage(Telegram.Bot.TelegramBotClient botClient, int chatId, int newMessageId)
 {
     using (TelegramContext db = new TelegramContext())
     {
         var userState = db.UserStates.Where(x => x.User.Id == chatId).SingleOrDefault();
         if (userState != null)
         {
             userState.LastMessageId = newMessageId;
             db.UserStates.Update(userState);
             await db.SaveChangesAsync();
         }
     }
 }
示例#18
0
 public static void StateUpdate(long userId, int state, int?buildingId = null)
 {
     using (TelegramContext db = new TelegramContext())
     {
         var userState = db.UserStates.Where(x => x.UserId == userId).SingleOrDefault();
         userState.State = state;
         if (buildingId != null)
         {
             userState.BuildingId = (int)buildingId;
         }
         db.UserStates.Update(userState);
         db.SaveChanges();
     }
 }
        public async Task SendGlobalNewsletter()
        {
            if (MessageCommand.Parameters.Count != 0)
            {
                await ReplyTextMessageAsync("Usage:\n/send_global_newsletter");

                return;
            }

            TelegramChat !.State       = SendingNewsletterState;
            TelegramChat["newsletter"] = null;
            await ReplyTextMessageAsync("Ok, now send me the text formatted as HTML");

            await TelegramContext.SaveChangesAsync();
        }
示例#20
0
        public static async void MainMenu(Models.ObjectsModels.User user, TelegramContext db, Message message, Telegram.Bot.TelegramBotClient botClient)
        {
            var keyboard = new InlineKeyboardMarkup(
                new InlineKeyboardButton[]
            {
                new InlineKeyboardButton {
                    Text = "Нова будівля", CallbackData = "AddBuilding"
                }
            }
                );

            var mess = await botClient.SendTextMessageAsync(message.Chat.Id, "Привіт, " + message.Chat.FirstName +
                                                            "! \n\nЦей бот створений для для того, щоб ми якомога швидше могли шукати будівлі. яким потрібна наша допомога. " +
                                                            "\n\nШвидше тисни кнопку, та рятуй прекрасне місто!🦄", Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0, keyboard);
        }
示例#21
0
 public static async void AddBuildingAddress(TelegramBotClient botClient, TelegramContext db, Message message, UserState userState)
 {
     try
     {
         var building = db.Buildings.Where(x => x.Id == userState.BuildingId).SingleOrDefault();
         building.Address = message.Text;
         db.Buildings.Update(building);
         db.SaveChanges();
         StateManager.StateUpdate(message.Chat.Id, (int)UserStatesEnum.AddBuildingComment);
         await botClient.SendTextMessageAsync(message.Chat.Id, "Введи коментар до будівлі", Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0);
     }
     catch (Exception ex)
     {
         await botClient.SendTextMessageAsync(message.Chat.Id, "Ошибка: " + ex.Message, Telegram.Bot.Types.Enums.ParseMode.Default);
     }
 }
示例#22
0
 public static async void AddBuildingComment(TelegramBotClient botClient, TelegramContext db, Message message, UserState userState)
 {
     try
     {
         var building = db.Buildings.Where(x => x.Id == userState.BuildingId).SingleOrDefault();
         building.Comment = message.Text;
         db.Buildings.Update(building);
         db.SaveChanges();
         StateManager.StateUpdate(message.Chat.Id, (int)UserStatesEnum.AddBuildingPhoto);
         await botClient.SendTextMessageAsync(message.Chat.Id, "Надсилай фото будівлі, а коли закінчиш напиши команду /save щоб зберегти пост!", Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0);
     }
     catch (Exception ex)
     {
         await botClient.SendTextMessageAsync(message.Chat.Id, "Ошибка: " + ex.Message, Telegram.Bot.Types.Enums.ParseMode.Default);
     }
 }
示例#23
0
        public static void ActionStateSelected(UserState userState,
                                               TelegramContext db,
                                               Telegram.Bot.TelegramBotClient botClient,
                                               Update update)
        {
            switch (userState.State)
            {
            case (int)UserStatesEnum.Empty:    //Empty
                break;

            case (int)UserStatesEnum.AddVacancies:
                VacanciesManager.ConfirmVacancу(botClient, update.Message, db);
                break;

            case (int)UserStatesEnum.AddHeader:
                VacanciesManager.AddHeader(botClient, update.Message, db);
                break;

            case (int)UserStatesEnum.AddDescription:
                VacanciesManager.AddDescription(botClient, update.Message, db);
                break;

            case (int)UserStatesEnum.AddResponsibilities:
                VacanciesManager.AddResponsibilities(botClient, update.Message, db);
                break;

            case (int)UserStatesEnum.AddRequirements:
                VacanciesManager.AddRequirements(botClient, update.Message, db);
                break;

            case (int)UserStatesEnum.AddOffered:
                VacanciesManager.AddOffered(botClient, update.Message, db);
                break;

            case (int)UserStatesEnum.AddPaymentOffers:
                VacanciesManager.AddPaymentOffers(botClient, update.Message, db);
                break;

            case (int)UserStatesEnum.AddAdditionalComment:
                VacanciesManager.AddAdditionalComment(botClient, update.Message, db);
                break;

            case (int)UserStatesEnum.AddContacts:
                VacanciesManager.AddContacts(botClient, update.Message, db);
                break;
            }
        }
示例#24
0
        private static async Task <string> GetUserWeather(int id)
        {
            using (var context = new TelegramContext())
            {
                await context.Database.EnsureCreatedAsync();

                var location = await context.UserLocations.FindAsync(id);

                if (location != null)
                {
                    var weatherInfo = await Weather.GetForecast(location.Latitude, location.Longitude);

                    return(FormatWeather(weatherInfo, location));
                }
                return(Strings.WeatherDefault);
            }
        }
示例#25
0
 public static async void AddBuildingName(TelegramBotClient botClient, TelegramContext db, Message message)
 {
     try
     {
         var building = new Building()
         {
             Name = message.Text, ParrentUserId = db.Users.Where(x => x.UserId == message.Chat.Id).Select(x => x.Id).SingleOrDefault()
         };
         db.Buildings.Add(building);
         db.SaveChanges();
         StateManager.StateUpdate(message.Chat.Id, (int)UserStatesEnum.AddBuildingAddress, building.Id);
         await botClient.SendTextMessageAsync(message.Chat.Id, "Введи адресу будівлі", Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0);
     }
     catch (Exception ex)
     {
         await botClient.SendTextMessageAsync(message.Chat.Id, "Ошибка: " + ex.Message, Telegram.Bot.Types.Enums.ParseMode.Default);
     }
 }
示例#26
0
        public static async void RemoveLastMessage(Telegram.Bot.TelegramBotClient botClient, int chatId)
        {
            using (TelegramContext db = new TelegramContext())
            {
                try
                {
                    var userState = db.UserStates.Where(x => x.User.Id == chatId).SingleOrDefault();
                    if (userState != null && userState.LastMessageId != null)
                    {
                        await botClient.DeleteMessageAsync(chatId, (int)userState.LastMessageId);

                        userState.LastMessageId = null;
                        db.UserStates.Update(userState);
                        db.SaveChanges();
                    }
                }
                catch { }
            }
        }
示例#27
0
        public static async void ChoseCallBackQuery(Telegram.Bot.TelegramBotClient botClient, Update Update)
        {
            try
            {
                using (TelegramContext db = new TelegramContext())
                {
                    var update   = Update;
                    var user     = db.Users.Where(x => x.UserId == update.CallbackQuery.From.Id).Single();
                    var callBack = update.CallbackQuery;
                    await botClient.AnswerCallbackQueryAsync(update.CallbackQuery.Id);

                    if (callBack.Data == "AddBuilding")
                    {
                        BuildingsManager.AddBuilding(botClient, db, update.CallbackQuery.Message);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
示例#28
0
        public override async Task ExecuteAsync(Message message, TelegramBotClient botClient)
        {
            var chatId = message.Chat.Id;

            using (TelegramContext db = new TelegramContext())
            {
                var uState = db.UserStates.Where(x => x.UserId == chatId).SingleOrDefault();
                var build  = db.Buildings.Where(x => x.Id == uState.BuildingId).SingleOrDefault();
                if (String.IsNullOrEmpty(build.Link))
                {
                    string[] buildarr = new string[4];
                    buildarr[0] = build.Name;
                    buildarr[1] = build.Address;
                    buildarr[2] = build.Comment;


                    var photos = FilesManager.GetFileByBuilding(build.Id, botClient, db);

                    GoogleAPIauth.UploadNewBuilding(buildarr, photos, botClient);
                }
            }
        }
        public async void OnSendCodeCommandExecute(object obj)
        {
            await Task.Run(async() =>
            {
                TeleStatus = "Ожидание подтверждения";

                IsSetCode            = false;
                TelegramContext.Code = AuthCode;
                try
                {
                    await TelegramContext.AuthUserAsync();


                    TeleStatus        = "Вы вошли успешно!!!";
                    IsProgramStarted  = true;
                    IsStartEnabled    = true;
                    IsCanChangeNumber = false;

                    TLChannelFulls = await TelegramContext.GetFullInfoCannelsAsync();
                    foreach (var channel in TLChannelFulls)
                    {
                        ChannelsNames.Add(channel.About);
                    }
                    TelegramContext.LogOut();
                    MySelectedItem = ChannelsNames?[0];
                }
                catch (Exception ex)
                {
                    TeleStatus = ex.Message;

                    if (File.Exists(PhotoPath + "dat"))
                    {
                        File.Delete(PhotoPath + "dat");
                    }
                }
            });
        }
示例#30
0
        private static async Task AddOrUpdateUsername(int id, string newUsername)
        {
            using (var context = new TelegramContext())
            {
                await context.Database.EnsureCreatedAsync();

                var profile = await context.UserProfiles.FindAsync(id);

                if (profile == null)
                {
                    var newProfile = new UserProfile {
                        Id = id, LastFm = newUsername
                    };
                    await context.UserProfiles.AddAsync(newProfile);

                    await context.SaveChangesAsync();
                }
                else
                {
                    profile.LastFm = newUsername;
                    await context.SaveChangesAsync();
                }
            }
        }