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(() => { });
        }
Beispiel #2
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:
            {
                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;
            }
        }
Beispiel #4
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:
            {
                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;
            }
        }
Beispiel #6
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;
            }
        }
Beispiel #7
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;
            }
        }
        ///--------------------------------------------------------------------------------------------------------
        ///
        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;
            }
        }