///-------------------------------------------------------------------------------------------------------- /// 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(() => { }); }
///-------------------------------------------------------------------------------------------------------- /// protected override void OnFinish() { base.OnFinish(); Logger.Log("지갑 복구 응답 완료.\n"); commandState = eCommandState.Ready; waitStartTime = DateTime.MinValue; }
///-------------------------------------------------------------------------------------------------------- /// protected override void OnFinish() { base.OnFinish(); Logger.Log("재기동 완료. {0}\n", success ? "Success" : "Failed"); commandState = eCommandState.Ready; waitStartTime = DateTime.MinValue; }
public void SetCurrent(cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommand), nameof(SetCurrent), Tag); if (mState != eCommandState.queued) { throw new InvalidOperationException(); } Hook.CommandStarted(lContext); mState = eCommandState.current; }
public void SetComplete(cTrace.cContext pParentContext) { var lContext = pParentContext.NewMethod(nameof(cCommand), nameof(SetComplete), Tag); if (mState != eCommandState.queued) { throw new InvalidOperationException(); } mDisposables.Dispose(); mState = eCommandState.complete; }
///-------------------------------------------------------------------------------------------------------- /// protected override async Task <bool> OnStart(long requesterId, string requesterName, DateTime requestTime, params object[] args) { commandState = eCommandState.InputWaitOtp; otpWaitUserId = requesterId; waitStartTime = DateTime.Now; await SendMessage(requesterId, strings.GetString("Otp 인증 번호를 입력 하세요.")); return(true); }
///-------------------------------------------------------------------------------------------------------- /// public override async Task OnUpdate() { await base.OnUpdate(); if (commandState == eCommandState.WaitOpt) { if ((DateTime.Now - waitStarTime).Ticks / TimeSpan.TicksPerSecond > 60.0f) { Logger.Log("주소 생성 응답 완료.\n"); IsCompleted = true; commandState = eCommandState.Ready; await SendMessage(optWaitUserId, strings.GetString("제한시간 초과")); } } }
///-------------------------------------------------------------------------------------------------------- /// 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; } }
//interprets an enum to set each UI state for right click buttons public void ButtonState(eCommandState inComingCommand) { CurrentCommand = inComingCommand; switch (CurrentCommand) { case eCommandState.MSC: HideButtons(); ButtonsStates[0] = true; ButtonsStates[2] = true; ButtonsStates[3] = true; moveButton(); break; case eCommandState.ASC: HideButtons(); ButtonsStates[1] = true; ButtonsStates[2] = true; ButtonsStates[3] = true; moveButton(); break; case eCommandState.MAC: HideButtons(); ButtonsStates[0] = true; ButtonsStates[1] = true; ButtonsStates[3] = true; moveButton(); break; case eCommandState.MC: HideButtons(); ButtonsStates[0] = true; ButtonsStates[3] = true; moveButton(); break; case eCommandState.AC: HideButtons(); ButtonsStates[1] = true; ButtonsStates[3] = true; moveButton(); break; case eCommandState.SC: HideButtons(); ButtonsStates[2] = true; ButtonsStates[3] = true; moveButton(); moveButton(); break; case eCommandState.C: HideButtons(); ButtonsStates[3] = true; moveButton(); break; case eCommandState.OFF: moveButton(); HideButtons(); 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; } }
///-------------------------------------------------------------------------------------------------------- /// protected override void OnFinish() { base.OnFinish(); commandState = eCommandState.Ready; }