public async Task Download() { if (IsDownloaded) { return; } if (IsEncrypt) { throw new ArgumentException("An encrypted message cannot download"); } ITelegramBotClient telegramBotClient = ModulesManager.GetModulesManager().GetTelegramBotClient(); using (MemoryStream stream = new MemoryStream()) { await telegramBotClient.GetInfoAndDownloadFileAsync(photoId, stream); byte[] imageBytes = stream.ToArray(); content = Convert.ToBase64String(imageBytes); } photoId = null; IsDownloaded = true; }
private bool CheckPassword(long chatId, string password) { IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager(); if (string.IsNullOrEmpty(password)) { messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.PasswordEmpty)); return(false); } if (password.Length < 12) { messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.PasswordMinLength)); return(false); } if (password.Length > 25) { messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.PasswordMaxLength)); return(false); } if (!Regex.IsMatch(password, @"^[a-zA-Z0-9!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~]+$")) { messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.PasswordCharacters)); return(false); } return(true); }
internal void Start() { ITelegramBotClient telegramBotClient = ModulesManager.GetModulesManager().GetTelegramBotClient(); telegramBotClient.OnMessage += OnMessage; telegramBotClient.StartReceiving(); }
public void HandleUserMessage(ITelegramUserMessage message) { if (message.IsEmpty()) { return; } ISessionManager sessionManager = ModulesManager.GetModulesManager().GetSessionManager(); IChatSession chatSession = sessionManager.GetChatSession(message.ChatId); if (chatSession == null) { sessionManager.CreateChatSession(message.ChatId); chatSession = sessionManager.GetChatSession(message.ChatId); } sessionManager.UserSentMessage(message.ChatId, message.MessageId); if (string.Equals(message.Message, "/e") || string.Equals(message.Message, "/exit")) { sessionManager.KillChatSession(message.ChatId); } else { chatStateHandlerFactory.GetChatStateHandler(chatSession.State).HandleUserMessage(message, this); } }
public void CreateUser(long chatId, string password) { ISecureManager secureManager = ModulesManager.GetModulesManager().GetSecureManager(); if (IsUserExist(chatId)) { LogoutUser(chatId); using (UsersContext db = new UsersContext()) { UserModel userModel = db.Users .Where(user => user.ChatId == chatId) .First(); userModel.HashPassword = secureManager.CalculateHash(password); db.SaveChanges(); } } else { using (UsersContext db = new UsersContext()) { UserModel userModel = new UserModel { ChatId = chatId, HashPassword = secureManager.CalculateHash(password) }; db.Users.Add(userModel); db.SaveChanges(); } } }
public void Send() { if (IsEncrypt) { throw new ArgumentException("An encrypted message cannot send"); } if (!IsDownloaded) { throw new ArgumentException("An undownloaded message cannot send"); } IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager(); switch (type) { case StashMessageType.Text: _ = messageManager.SendTextMessage(ChatId, content); break; case StashMessageType.Photo: byte[] imageBytes = Convert.FromBase64String(content); _ = messageManager.SendPhotoMessage(ChatId, imageBytes); break; case StashMessageType.Empty: break; } }
public void Encrypt(IUser user) { if (IsEncrypt) { return; } if (!IsDownloaded) { throw new ArgumentException("An undownloaded message cannot encrypt"); } if (!user.IsAuthorized) { throw new ArgumentException("User is unauthorized, message cannot encrypt"); } ISecureManager secureManager = ModulesManager.GetModulesManager().GetSecureManager(); string password = secureManager.DecryptWithAes(user.EncryptedPassword); if (type != StashMessageType.Empty) { content = secureManager.EncryptWithAesHmac(content, password); } IsEncrypt = true; }
private void Logout(long chatId, IChatStateHandlerContext context) { IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager(); IUserManager userManager = ModulesManager.GetModulesManager().GetUserManager(); userManager.LogoutUser(chatId); messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.Logout)); context.ChangeChatState(chatId, Session.ChatSessionState.Start); }
private void WriteBotStatus() { ITelegramBotClient telegramBotClient = ModulesManager.GetModulesManager().GetTelegramBotClient(); Telegram.Bot.Types.User me = telegramBotClient.GetMeAsync().Result; Console.WriteLine(DateTime.Now + " - Bot set up!"); Console.WriteLine($"Id: {me.Id}"); Console.WriteLine($"Login: {me.Username}"); Console.WriteLine($"Name: {me.FirstName}"); }
public void Kill() { IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager(); IUserManager userManager = ModulesManager.GetModulesManager().GetUserManager(); messageManager.DeleteListMessages(ChatId, botMessagesId); botMessagesId.Clear(); messageManager.DeleteListMessages(ChatId, userMessagesId); userMessagesId.Clear(); userManager.LogoutUser(ChatId); }
public void CreateNewUser(long chatId, string password) { IDatabaseManager databaseManager = ModulesManager.GetModulesManager().GetDatabaseManager(); if (databaseManager.IsStashExist(chatId)) { databaseManager.ClearStash(chatId); } databaseManager.CreateUser(chatId, password); }
public void Login(string password) { if (string.IsNullOrEmpty(password)) { throw new ArgumentException("Password cannot be null"); } ISecureManager secureManager = ModulesManager.GetModulesManager().GetSecureManager(); EncryptedPassword = secureManager.EncryptWithAes(password); IsAuthorized = true; }
public void ChangeChatState(long chatId, ChatSessionState newState) { ISessionManager sessionManager = ModulesManager.GetModulesManager().GetSessionManager(); IChatSession chatSession = sessionManager.GetChatSession(chatId); if (chatSession != null) { chatSession.State = newState; chatStateHandlerFactory.GetChatStateHandler(chatSession.State).StartStateMessage(chatId); } }
private void RegistrationUser(ITelegramUserMessage message, IChatStateHandlerContext context) { IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager(); IUserManager userManager = ModulesManager.GetModulesManager().GetUserManager(); if (CheckPassword(message.ChatId, message.Message)) { userManager.CreateNewUser(message.ChatId, message.Message); messageManager.SendTextMessage(message.ChatId, TextResponse.Get(ResponseType.SuccessRegistration)); context.ChangeChatState(message.ChatId, Session.ChatSessionState.Start); } }
public void HandleUserMessage(ITelegramUserMessage message, IChatStateHandlerContext context) { if (message == null || context == null) { return; } IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager(); messageManager.SendTextMessage(message.ChatId, TextResponse.Get(ResponseType.WelcomeMessage)); context.ChangeChatState(message.ChatId, ChatSessionState.Start); }
internal UserLocal(long chatId, string password) { if (string.IsNullOrEmpty(password)) { throw new ArgumentException("Password cannot be null"); } ISecureManager secureManager = ModulesManager.GetModulesManager().GetSecureManager(); ChatId = chatId; IsAuthorized = false; hashPassword = secureManager.CalculateHash(password); EncryptedPassword = null; }
private async Task SaveMessageToStash(ITelegramUserMessage message) { IDatabaseManager databaseManager = ModulesManager.GetModulesManager().GetDatabaseManager(); IUser user = databaseManager.GetUser(message.ChatId); if (user != null && user.IsAuthorized) { IStashMessage stashMessage = databaseManager.CreateStashMessage(message); await stashMessage.Download(); stashMessage.Encrypt(user); databaseManager.SaveMessageToStash(stashMessage); } }
private void GetStash(long chatId, IChatStateHandlerContext context) { IDatabaseManager databaseManager = ModulesManager.GetModulesManager().GetDatabaseManager(); IUser user = databaseManager.GetUser(chatId); if (user != null && user.IsAuthorized) { List <IStashMessage> messagesFromStash = databaseManager.GetMessagesFromStash(chatId); foreach (IStashMessage stashMessage in messagesFromStash) { stashMessage.Decrypt(user); stashMessage.Send(); } } }
public async Task SendTextMessage(long chatId, string messageText) { if (string.IsNullOrEmpty(messageText)) { return; } ITelegramBotClient telegramBotClient = ModulesManager.GetModulesManager().GetTelegramBotClient(); ISessionManager sessionManager = ModulesManager.GetModulesManager().GetSessionManager(); Telegram.Bot.Types.Message message = await telegramBotClient.SendTextMessageAsync( chatId : chatId, text : messageText ); sessionManager.BotSentMessage(chatId, message.MessageId); }
private void LoginUser(ITelegramUserMessage message, IChatStateHandlerContext context) { IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager(); IUserManager userManager = ModulesManager.GetModulesManager().GetUserManager(); bool success = userManager.LoginUser(message.ChatId, message.Message); if (success) { messageManager.SendTextMessage(message.ChatId, TextResponse.Get(ResponseType.SuccessAuthorisation)); context.ChangeChatState(message.ChatId, Session.ChatSessionState.Authorized); } else { messageManager.SendTextMessage(message.ChatId, TextResponse.Get(ResponseType.FailAuthorisation)); } }
public async Task SendPhotoMessage(long chatId, byte[] imageBytes) { if (imageBytes == null || imageBytes.Length == 0) { return; } ITelegramBotClient telegramBotClient = ModulesManager.GetModulesManager().GetTelegramBotClient(); ISessionManager sessionManager = ModulesManager.GetModulesManager().GetSessionManager(); using (Stream stream = new MemoryStream(imageBytes)) { Telegram.Bot.Types.Message message = await telegramBotClient.SendPhotoAsync( chatId, new InputOnlineFile(stream) ); sessionManager.BotSentMessage(chatId, message.MessageId); } }
public void HandleUserMessage(ITelegramUserMessage message, IChatStateHandlerContext context) { if (message == null || context == null) { return; } IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager(); IUserManager userManager = ModulesManager.GetModulesManager().GetUserManager(); if (IsCommand(message.Message)) { commands[message.Message](message.ChatId, context); } else { if (!string.IsNullOrEmpty(message.Message)) { LoginUser(message, context); } } }
public bool ValidatePassword(string password) { ISecureManager secureManager = ModulesManager.GetModulesManager().GetSecureManager(); return(secureManager.CompareWithHash(password, hashPassword)); }
private void OnMessage(object sender, MessageEventArgs e) { IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager(); messageManager.HandleUserMessage(telegramUserMessageFactory.Create(e.Message)); }
public void DeleteMessage(long chatId, int messageId) { ITelegramBotClient telegramBotClient = ModulesManager.GetModulesManager().GetTelegramBotClient(); telegramBotClient.DeleteMessageAsync(chatId, messageId); }
public bool LoginUser(long chatId, string password) { IDatabaseManager databaseManager = ModulesManager.GetModulesManager().GetDatabaseManager(); return(databaseManager.LoginUser(chatId, password)); }
public void StartStateMessage(long chatId) { IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager(); messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.RegistrationReady)); }
public void StartStateMessage(long chatId) { IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager(); messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.MainCommands)); }
private void Information(long chatId, IChatStateHandlerContext context) { IMessageManager messageManager = ModulesManager.GetModulesManager().GetMessageManager(); messageManager.SendTextMessage(chatId, TextResponse.Get(ResponseType.Information)); }
public void LogoutUser(long chatId) { IDatabaseManager databaseManager = ModulesManager.GetModulesManager().GetDatabaseManager(); databaseManager.LogoutUser(chatId); }