Beispiel #1
0
        ///--------------------------------------------------------------------------------------------------------
        ///
        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;
        }
Beispiel #3
0
        ///--------------------------------------------------------------------------------------------------------
        ///
        protected override void OnFinish()
        {
            base.OnFinish();

            Logger.Log("재기동 완료. {0}\n", success ? "Success" : "Failed");

            commandState = eCommandState.Ready;

            waitStartTime = DateTime.MinValue;
        }
Beispiel #4
0
                    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;
                    }
Beispiel #5
0
                    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);
        }
Beispiel #7
0
        ///--------------------------------------------------------------------------------------------------------
        ///
        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;
            }
        }
Beispiel #9
0
        ///--------------------------------------------------------------------------------------------------------
        ///
        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;
        }
    }
Beispiel #11
0
        ///--------------------------------------------------------------------------------------------------------
        ///
        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;
            }
        }
Beispiel #12
0
        ///--------------------------------------------------------------------------------------------------------
        ///
        protected override void OnFinish()
        {
            base.OnFinish();

            commandState = eCommandState.Ready;
        }