///-------------------------------------------------------------------------------------------------------- /// public override async Task OnMessage(Telegram.Bot.Types.Message message) { if (commandState == eCommandState.WaitOpt) { long requesterId = message.Chat.Id; if (requesterId == optWaitUserId) { commandState = eCommandState.Ready; string otpStr = message.Text.Trim(); if (OtpChecker.CheckOtp(otpStr)) { string response = await MakeResponse(requesterId, DateTimeHandler.ToLocalTime(message.Date)); await SendMessage(requesterId, response); } else { await SendMessage(requesterId, strings.GetString("Otp 인증에 실패 했습니다.")); } Logger.Log("주소 생성 응답 완료.\n"); IsCompleted = true; } } await Task.Run(() => { }); }
///-------------------------------------------------------------------------------------------------------- /// public override async Task OnMessage(Telegram.Bot.Types.Message message) { await base.OnMessage(message); string msg = message.Text.Trim(); long requesterId = message.Chat.Id; if (requesterId != otpWaitUserId) { return; } switch (commandState) { case eCommandState.InputWaitOtp: { IsCompleted = true; string otpStr = message.Text.Trim(); if (OtpChecker.CheckOtp(otpStr)) { string requesterName = message.Chat.Username; await SendMessage(requesterId, strings.Format("{0} 지갑을 재기동합니다.", requesterName)); bool success = await Restart(restartParams); string response = strings.Format("재기동 완료. 결과 : {0}", success ? "Success" : "Failed"); await SendMessage(requesterId, response); Logger.Log("재기동 완료. {0}\n", success ? "Success" : "Failed"); if (success && Config.StartupAutoStaking) { ICommand autoStaking = CommandFactory.CreateCommand(eCommand.StartStaking); if (autoStaking != null) { await autoStaking.Process(requesterId, requesterName, DateTimeHandler.GetTimeZoneNow()); } } } else { await SendMessage(requesterId, strings.GetString("Otp 인증에 실패 했습니다.")); } } break; } }
///-------------------------------------------------------------------------------------------------------- /// public override async Task OnMessage(Telegram.Bot.Types.Message message) { await base.OnMessage(message); string msg = message.Text.Trim(); long requesterId = message.Chat.Id; if (requesterId != otpWaitUserId) { return; } switch (commandState) { case eCommandState.InputWaitOtp: { IsCompleted = true; string otpStr = message.Text.Trim(); if (OtpChecker.CheckOtp(otpStr)) { string response = strings.GetString("머신을 재시작 합니다."); await SendMessage(requesterId, response.Trim()); System.Diagnostics.Process.Start("shutdown.exe", "-r"); } else { await SendMessage(requesterId, strings.GetString("Otp 인증에 실패 했습니다.")); } } break; } }
///-------------------------------------------------------------------------------------------------------- /// public override async Task OnMessage(Telegram.Bot.Types.Message message) { await base.OnMessage(message); string msg = message.Text.Trim(); long requesterId = message.Chat.Id; if (requesterId != otpWaitUserId) { return; } switch (commandState) { case eCommandState.InputWaitOtp: { IsCompleted = true; string otpStr = message.Text.Trim(); if (OtpChecker.CheckOtp(otpStr)) { string response = strings.GetString("지갑 백업 응답 완료.\n"); response += "\n" + QtumHandler.BackupWallet(); await SendMessage(requesterId, response.Trim()); } else { await SendMessage(requesterId, strings.GetString("Otp 인증에 실패 했습니다.")); } } break; } }
///-------------------------------------------------------------------------------------------------------- /// public override async Task OnMessage(Telegram.Bot.Types.Message message) { await base.OnMessage(message); string msg = message.Text.Trim(); long requesterId = message.Chat.Id; if (requesterId != otpWaitUserId) { return; } switch (commandState) { case eCommandState.InputWaitOtp: { string otpStr = message.Text.Trim(); if (OtpChecker.CheckOtp(otpStr)) { List <string> fileList = GetBackupFileList(); if (fileList.Count == 0) { IsCompleted = true; await SendMessage(requesterId, strings.GetString("백업 파일이 없습니다.")); return; } string response = strings.GetString("백업 파일을 숫자로 선택하세요."); for (int i = 0; i < fileList.Count; ++i) { response += string.Format("\n{0}. {1}", i + 1, fileList[i]); } waitStartTime = DateTime.Now; commandState = eCommandState.InputWaitChoiceWallet; await SendMessage(requesterId, response); } else { IsCompleted = true; await SendMessage(requesterId, strings.GetString("Otp 인증에 실패 했습니다.")); } } break; case eCommandState.InputWaitChoiceWallet: { IsCompleted = true; int backupNum = 0; List <string> fileList = GetBackupFileList(); string response = strings.GetString("지갑 복구 응답 완료.\n"); if (int.TryParse(msg, out backupNum) == false || backupNum <= 0 || fileList.Count < backupNum) { response += "\n" + strings.GetString("잘못된 번호 입니다."); await SendMessage(requesterId, response); } else { string filename = fileList[backupNum - 1]; await SendMessage(requesterId, strings.GetString("지갑을 복구하는 중 입니다....") + " " + filename); response += "\n" + QtumHandler.RestoreWallet("./backups/" + filename); await SendMessage(requesterId, response); } } break; } }
///-------------------------------------------------------------------------------------------------------- /// public override async Task OnMessage(Telegram.Bot.Types.Message message) { await base.OnMessage(message); string msg = message.Text.Trim(); long requesterId = message.Chat.Id; if (requesterId != otpWaitUserId) { return; } switch (commandState) { case eCommandState.InputWaitOtp: { string otpStr = message.Text.Trim(); if (OtpChecker.CheckOtp(otpStr)) { commandState = eCommandState.InputWaitIPFSHash; waitStartTime = DateTime.Now; await SendMessage(requesterId, strings.GetString("IPFS 해시값을 입력하세요.")); } else { IsCompleted = true; await SendMessage(requesterId, strings.GetString("Otp 인증에 실패 했습니다.")); } } break; case eCommandState.InputWaitIPFSHash: { string hashStr = message.Text.Trim(); ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = @"cmd"; startInfo.WindowStyle = ProcessWindowStyle.Hidden; // cmd창이 숨겨지도록 하기 startInfo.CreateNoWindow = true; // cmd창을 띄우지 안도록 하기 startInfo.UseShellExecute = false; startInfo.RedirectStandardOutput = true; // cmd창에서 데이터를 가져오기 startInfo.RedirectStandardInput = true; // cmd창으로 데이터 보내기 startInfo.RedirectStandardError = true; // cmd창에서 오류 내용 가져오기 startInfo.StandardOutputEncoding = Encoding.UTF8; startInfo.WorkingDirectory = System.IO.Directory.GetCurrentDirectory(); try { string command = string.Format("update_checker {0}", hashStr); using (Process process = new Process()) { process.EnableRaisingEvents = false; process.StartInfo = startInfo; process.Start(); process.StandardInput.Write(command + Environment.NewLine); process.StandardInput.Close(); process.WaitForExit(); process.Close(); } } catch (Exception e) { Logger.Log(e.ToString()); } IsCompleted = true; } break; } }
///-------------------------------------------------------------------------------------------------------- /// public override async Task OnMessage(Telegram.Bot.Types.Message message) { await base.OnMessage(message); string msg = message.Text.Trim(); long requesterId = message.Chat.Id; if (requesterId != otpWaitUserId) { return; } switch (commandState) { case eCommandState.InputWaitOtp: { string otpStr = message.Text.Trim(); if (OtpChecker.CheckOtp(otpStr)) { commandState = eCommandState.InputWaitCommandLine; waitStartTime = DateTime.Now; await SendMessage(requesterId, strings.GetString("명령을 입력하세요.\n\n")); } else { IsCompleted = true; await SendMessage(requesterId, strings.GetString("Otp 인증에 실패 했습니다.")); } } break; case eCommandState.InputWaitCommandLine: { string commandLineStr = msg; Logger.Log("[" + message.Chat.Username + "] [" + message.Chat.Id + "] : " + commandLineStr); string commandResult = QtumHandler.CommandLine(commandLineStr).Trim(); List <string> resultList = new List <string>(); await SendMessage(requesterId, "------------------------", Telegram.Bot.Types.Enums.ParseMode.Default); if (string.IsNullOrEmpty(commandResult)) { commandResult = "empty"; resultList.Add(commandResult); } else { // convert string to stream byte[] byteArray = Encoding.UTF8.GetBytes(commandResult); using (MemoryStream stream = new MemoryStream(byteArray)) { using (StreamReader reader = new StreamReader(stream)) { while (reader.EndOfStream == false) { resultList.Add(reader.ReadLine()); } } } } const int maxSendCount = 10; const int onceListCount = 50; int sendCount = 0; for (int i = 0; i < resultList.Count(); i += onceListCount) { string responseMsg = ""; for (int j = 0; j < onceListCount; ++j) { int idx = i + j; if (idx >= resultList.Count()) { break; } responseMsg += resultList[idx] + "\n"; } if (++sendCount >= maxSendCount) { await SendMessage(requesterId, "The result text is too long....", Telegram.Bot.Types.Enums.ParseMode.Default); break; } await SendMessage(requesterId, responseMsg, Telegram.Bot.Types.Enums.ParseMode.Default); } await SendMessage(requesterId, "------------------------", Telegram.Bot.Types.Enums.ParseMode.Default); IsCompleted = true; } break; } }
///-------------------------------------------------------------------------------------------------------- /// public override async Task OnMessage(Telegram.Bot.Types.Message message) { await base.OnMessage(message); string msg = message.Text.Trim(); long requesterId = message.Chat.Id; if (requesterId != otpWaitUserId) { return; } switch (commandState) { case eSendCommandState.InputWaitOtp: { string otpStr = message.Text.Trim(); if (OtpChecker.CheckOtp(otpStr)) { commandState = eSendCommandState.InputWaitSendAddress; waitStartTime = DateTime.Now; string sendMsg = strings.GetString("사용 할 본인의 주소를 번호로 선택하세요."); sendMsg += "\n0. " + strings.GetString("자동으로 선택"); int num = 1; foreach (var pair in myAddressList) { sendMsg += string.Format("\n{0}. {1}:{2} Qtum", num, GetAddressLink(pair.Key), pair.Value); ++num; } await SendMessage(requesterId, sendMsg); } else { IsCompleted = true; await SendMessage(requesterId, strings.GetString("Otp 인증에 실패 했습니다.")); } } break; case eSendCommandState.InputWaitSendAddress: { string[] args = msg.Split(' '); int addressNum = 0; if (args.Length <= 0 || int.TryParse(args[0], out addressNum) == false || addressNum <0 || addressNum> myAddressList.Count) { IsCompleted = true; await SendMessage(requesterId, strings.GetString("유효하지 않은 주소입니다.")); } else { if (addressNum == 0) { myAddress = ""; // 자동이면 주소가 없습니다. } else { myAddress = myAddressList.Keys.ToArray()[addressNum - 1]; } if (string.IsNullOrEmpty(myAddress) || QtumHandler.IsValidateAddress(myAddress)) { commandState = eSendCommandState.InputWaitReceiveAddress; waitStartTime = DateTime.Now; await SendMessage(requesterId, strings.GetString("상대방의 퀀텀 주소를 입력하세요.")); } else { IsCompleted = true; await SendMessage(requesterId, strings.GetString("유효하지 않은 주소입니다.")); } } } break; case eSendCommandState.InputWaitReceiveAddress: { bool invalidMyAddress = false; double myBalance = 0; if (string.IsNullOrEmpty(myAddress) == false && myAddressList.TryGetValue(myAddress, out myBalance) == false) { invalidMyAddress = true; } if (invalidMyAddress == false && QtumHandler.IsValidateAddress(msg)) { destAdress = msg; commandState = eSendCommandState.InputWaitAmount; waitStartTime = DateTime.Now; if (string.IsNullOrEmpty(myAddress) || myAddressList.TryGetValue(myAddress, out myBalance) == false) { myBalance = QtumHandler.GetBalance(); } else { myBalance = myAddressList[myAddress]; } string sendMsg = strings.GetString("보낼 수량을 입력하세요."); sendMsg += "\n" + strings.Format("가능 수량 {0}", myAddress + " " + myBalance); await SendMessage(requesterId, sendMsg); } else { IsCompleted = true; await SendMessage(requesterId, strings.GetString("유효하지 않은 주소입니다.")); } } break; case eSendCommandState.InputWaitAmount: { double amount = 0; if (double.TryParse(msg, out amount) && QtumHandler.GetBalance() >= amount) { destAmount = amount; commandState = eSendCommandState.InputWaitConfirm; string myAddressStr = myAddress; if (string.IsNullOrEmpty(myAddressStr)) { myAddressStr = strings.GetString("자동으로 선택"); } string str = strings.Format("나의 주소 : {0}", GetAddressLink(myAddressStr)) + "\n" + strings.Format("받는 주소 : {0}", GetAddressLink(destAdress)) + "\n" + strings.Format("보낼 수량 : {0}", destAmount); str += "\n" + strings.Format("정말 진행 하시려면 숫자 1을 입력하세요."); waitStartTime = DateTime.Now; await SendMessage(requesterId, str); } else { IsCompleted = true; await SendMessage(requesterId, strings.GetString("수량이 부족합니다.")); } } break; case eSendCommandState.InputWaitConfirm: { int num = 0; if (int.TryParse(msg, out num) && num == 1) { commandState = eSendCommandState.Ready; waitStartTime = DateTime.MinValue; string result = QtumHandler.Send(myAddress, destAdress, destAmount); if (string.IsNullOrEmpty(result) == false) { string sendResultMsg = string.Format("tx: {0}", GetTxLink(result)); await SendMessage(requesterId, sendResultMsg); await SendMessage(requesterId, strings.GetString("보내기 응답 완료.\n")); } else { await SendMessage(requesterId, strings.GetString("보내기에 실패했습니다.")); } IsCompleted = true; } else { IsCompleted = true; await SendMessage(requesterId, strings.GetString("보내기가 취소되었습니다.")); } } break; } }