Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            TelegramRequest Tr = new TelegramRequest();

            Tr.ResponseReceived += Tr_ResponseReceived;
            Tr.GetUpdates();
        }
Ejemplo n.º 2
0
        public void Start()
        {
            logger.Info("Starting bot");
            TelegramRequest Tr = new TelegramRequest(MainSettings.Default.Token, MainSettings.Default.API_URL);

            Tr.MessageText     += Tr_MessageText;
            Tr.MessageSticker  += Tr_MessageSticker;
            Tr.MessagePhoto    += Tr_MessagePhoto;
            Tr.MessageVideo    += Tr_MessageVideo;
            Tr.MessageDocument += Tr_MessageDocument;
            Tr.MessageLocation += Tr_MessageLocation;
            Tr.MessageContact  += Tr_MessageContact;
            Tr.MessageVoice    += Tr_MessageVoice;

            DBAPI Db = new DBAPI(MainSettings.Default.DB_DataSource, MainSettings.Default.DB_UserID, MainSettings.Default.DB_Password, MainSettings.Default.DB_InitialCatalog);

            Db.RegTransactionEvent += RegisterTransaction;


            logger.Info("Connection to DB");
            Db.Connect();

            logger.Info("Start pooling telegram API");
            Tr.GetUpdates();

            //Console.ReadLine();
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Send UptimeRobot uptime notification to Telegram
        /// </summary>
        /// <param name="uptimeRobotAlert"></param>
        /// <returns></returns>
        public async Task <bool> TrySendUptimeRobotAlert(UptimeRobotAlert uptimeRobotAlert)
        {
            try
            {
                var message = "";

                // Down
                if (uptimeRobotAlert.AlertType == UptimeRobotAlert.AlertTypes.Down)
                {
                    message = $"<b>{uptimeRobotAlert.FriendlyName}</b> has gone <strong>{uptimeRobotAlert.AlertTypeFriendlyName.ToUpper()}</strong>\n";
                }
                // Up
                else if (uptimeRobotAlert.AlertType == UptimeRobotAlert.AlertTypes.Up)
                {
                    message = $"<b>{uptimeRobotAlert.FriendlyName}</b> is now <strong>{uptimeRobotAlert.AlertTypeFriendlyName.ToUpper()}</strong>\nDown for: <b>{uptimeRobotAlert.AlertDuration} seconds</b>\n";
                }

                message += (!string.IsNullOrEmpty(uptimeRobotAlert.Url)) ? $"Target: {uptimeRobotAlert.Url}\n" : "";
                message += (!string.IsNullOrEmpty(uptimeRobotAlert.AlertDetails)) ? $"Details: {uptimeRobotAlert.AlertDetails}\n" : "";

                var telegramRequest  = new TelegramRequest(_telegramSettings.TelegramChannel, "HTML", message);
                var telegramResponse = await _httpClient.PostAsync(new Uri($"{_telegramSettings.TelegramUrl}/bot{_telegramSettings.Token}/sendMessage"), new StringContent(JsonConvert.SerializeObject(telegramRequest), Encoding.UTF8, "application/json"));

                return(telegramResponse.IsSuccessStatusCode);
            }
            catch (Exception e)
            {
                _logger.Error(e, "Got an exception while sending UptimeRobot alert to Twitter");
                return(false);
            }
        }
Ejemplo n.º 4
0
        public Task Process(TelegramRequest request)
        {
            // Log

            // Answer properly

            return(Task.FromResult(0));
        }
Ejemplo n.º 5
0
            private async Task ValidateRequestAsync <TResult>(IRequest <TResult> request, Command command, CustomContext context)
            {
                IClientApi client = await _telegramService.BuildAsync(command.UserId);

                var result = (await TelegramRequest.HandleAsync(() =>
                {
                    return(client.CustomRequestsService.SendRequestAsync(request));
                }, context));
            }
Ejemplo n.º 6
0
            public async Task <Result> HandleAsync(Query query)
            {
                IClientApi client = await _telegramService.BuildAsync(query.UserId);

                TUserFull result = await TelegramRequest.HandleAsync(() =>
                {
                    return(client.UsersService.GetCurrentUserFullAsync());
                });

                return(new Result(result.User.As <TUser>()));
            }
Ejemplo n.º 7
0
            public async Task <bool> HandleAsync(Query query)
            {
                IClientApi client = await _telegramService.BuildAsync(query.UserId);

                await TelegramRequest.HandleAsync(() =>
                {
                    return(client.AuthService.LogoutAsync());
                });

                return(true);
            }
Ejemplo n.º 8
0
            public async Task <string> HandleAsync(Query query)
            {
                string     hashedPhoneId = HashHelper.GetHash(query.PhoneNumber);
                IClientApi client        = await _telegramService.BuildAsync(hashedPhoneId).ConfigureAwait(false);

                ISentCode result = await TelegramRequest.HandleAsync(() =>
                {
                    return(client.AuthService.SendCodeAsync(query.PhoneNumber));
                }).ConfigureAwait(false);

                return(result.PhoneCodeHash);
            }
Ejemplo n.º 9
0
        /// <summary>
        /// Send pidns query statistics to Telegram
        /// </summary>
        /// <param name="totalDnsRequests"></param>
        /// <param name="totalAdsBlocked"></param>
        /// <param name="printableTimeSpan"></param>
        /// <returns></returns>
        public async Task <bool> TrySendPiDnsStatistics(long totalDnsRequests, long totalAdsBlocked, string printableTimeSpan)
        {
            try
            {
                var message          = $"During the last {printableTimeSpan}, <a href=\"https://pi-dns.com\">pi-dns.com</a> have served <b>{totalDnsRequests.ToString("n0", new CultureInfo("en-US"))}</b> DNS requests and blocked <b>{totalAdsBlocked.ToString("n0", new CultureInfo("en-US"))}</b> ads!";
                var telegramRequest  = new TelegramRequest(_telegramSettings.TelegramChannel, "HTML", message);
                var telegramResponse = await _httpClient.PostAsync($"{_telegramSettings.TelegramUrl}/bot{_telegramSettings.Token}/sendMessage", new StringContent(JsonConvert.SerializeObject(telegramRequest), Encoding.UTF8, "application/json"));

                return(telegramResponse.IsSuccessStatusCode);
            }
            catch (Exception e)
            {
                _logger.Error(e, "Got an exception while sending pidns statistics alert to Telegram");
                return(false);
            }
        }
Ejemplo n.º 10
0
            public async Task <TUser> HandleAsync(Query query)
            {
                string     hashedPhoneId = HashHelper.GetHash(query.PhoneNumber);
                IClientApi client        = await _telegramService.BuildAsync(hashedPhoneId).ConfigureAwait(false);

                var sentCode = new TSentCode()
                {
                    PhoneCodeHash = query.SentCode
                };

                TUser result = await TelegramRequest.HandleAsync(() =>
                {
                    return(client.AuthService.SignInAsync(query.PhoneNumber, sentCode, query.Code));
                }).ConfigureAwait(false);

                return(result);
            }
Ejemplo n.º 11
0
            public async Task <bool> HandleAsync(Query query)
            {
                IClientApi client = await _telegramService.BuildAsync(query.UserId);

                byte[] result = (await TelegramRequest.HandleAsync(() =>
                {
                    return(client.FileService.DownloadFullFileAsync(query.Location));
                }));

                return(true);

                //return new FileInfo()
                //{
                //    Content = result,
                //    Name = _guidService.New().ToString("n")
                //};
            }
Ejemplo n.º 12
0
            public async Task <List <Chat> > HandleAsync(Query query)
            {
                IClientApi client = await _telegramService.BuildAsync(query.UserId);

                TDialogs result = (await TelegramRequest.HandleAsync(() =>
                {
                    return(client.MessagesService.GetUserDialogsAsync());
                })).As <TDialogs>();

                var chats = new List <Chat>();

                foreach (IChat chat in result.Chats)
                {
                    chats.AddWhenNotNull(ChatParser.ParseChat(chat));
                }

                return(chats);
            }
Ejemplo n.º 13
0
        public async Task ForPeer(int id, PeerType peerType, string userId, int offset, int maxId)
        {
            IInputPeer peer   = GetPeer(id, peerType);
            IClientApi client = await _telegramService.BuildAsync(userId);

            IMessages history = await TelegramRequest.HandleAsync(() =>
            {
                return(client.MessagesService.GetHistoryAsync(peer, offset, maxId, 100));
            });

            List <Message> messages = MessagesParser.Parse(history, id, peerType);
            await _eventHub.SendAsync(messages);

            if (messages.Count > 0)
            {
                BackgroundJob.Schedule <GetMessages>(
                    job => job.ForPeer(id, peerType, userId, offset + 100, 0),
                    TimeSpan.FromSeconds(_randomService.Random.Next(5, 20)));
            }
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Send HetrixTools uptime notification to Telegram
        /// </summary>
        /// <param name="hetrixToolsAlert"></param>
        /// <returns></returns>
        public async Task <bool> TrySendHetrixToolsAlert(HetrixToolsAlert hetrixToolsAlert)
        {
            try
            {
                var message = "";

                // Down
                if (hetrixToolsAlert.Monitor_status == HetrixToolsAlert.MonitorStatus.Offline)
                {
                    message = $"<b>{hetrixToolsAlert.Monitor_name}</b> has gone <strong>{hetrixToolsAlert.Monitor_status.ToUpper()}</strong>\nTarget: <b>{hetrixToolsAlert.Monitor_target}</b>\nMonitor Type: {hetrixToolsAlert.Monitor_type}\nMonitor Reports: \n";

                    foreach (var obj in hetrixToolsAlert.Monitor_errors.GetType()
                             .GetProperties(BindingFlags.Instance | BindingFlags.Public)
                             .Where(p => !p.GetIndexParameters().Any())
                             .Where(p => p.CanRead && p.CanWrite))
                    {
                        var value = obj.GetValue(hetrixToolsAlert.Monitor_errors, null);
                        if (value != null)
                        {
                            message += $"\t-{obj.Name}: {value}\n";
                        }
                    }
                }
                // Up
                else if (hetrixToolsAlert.Monitor_status == HetrixToolsAlert.MonitorStatus.Online)
                {
                    message = $"<b>{hetrixToolsAlert.Monitor_name}</b> is now <strong>{hetrixToolsAlert.Monitor_status.ToUpper()}</strong>\nTarget: <b>{hetrixToolsAlert.Monitor_target}</b>\nType: {hetrixToolsAlert.Monitor_type}";
                }

                var telegramRequest  = new TelegramRequest(_telegramSettings.TelegramChannel, "HTML", message);
                var telegramResponse = await _httpClient.PostAsync(new Uri($"{_telegramSettings.TelegramUrl}/bot{_telegramSettings.Token}/sendMessage"), new StringContent(JsonConvert.SerializeObject(telegramRequest), Encoding.UTF8, "application/json"));

                return(telegramResponse.IsSuccessStatusCode);
            }
            catch (Exception e)
            {
                _logger.Error(e, "Got an exception while sending hetrix tools alert to Telegram");
                return(false);
            }
        }
Ejemplo n.º 15
0
            public async Task <List <Contact> > HandleAsync(Query query)
            {
                IClientApi client = await _telegramService.BuildAsync(query.UserId);

                TContacts result = (await TelegramRequest.HandleAsync(() =>
                {
                    return(client.ContactsService.GetContactsAsync());
                }));

                List <Contact> contacts = result.Users.Select(c =>
                {
                    var user = c.As <TUser>();
                    return(new Contact()
                    {
                        FirstName = user.FirstName,
                        Id = user.Id,
                        LastName = user.LastName,
                        UserName = user.Username
                    });
                }).ToList();

                return(contacts);
            }
Ejemplo n.º 16
0
        private void Tr_MessageText(object sendr, MessageText e)
        {
            logger.Debug($"New message: message_id:{e.message_id} user_id:{e.from.id} chat_id:{e.chat.id} username:{e.from.username} name: {e.from.first_name} {e.from.last_name} date: {e.date} message:'{e.text}'");
            Method m = new Method(MainSettings.Default.Token, MainSettings.Default.API_URL);
            DBAPI  d = new DBAPI(MainSettings.Default.DB_DataSource, MainSettings.Default.DB_UserID, MainSettings.Default.DB_Password, MainSettings.Default.DB_InitialCatalog);

            d.RegTransactionEvent += RegisterTransaction;
            d.Connect();
            string answer;
            string message = e.text.Replace("@DeeBeeTeeBot", "");

            message = message.Replace("@DeeBeeTeeTestBot", "");
            string command_params = "";
            int    space          = message.IndexOf(" ");
            string command;

            if (space == -1)
            {
                command = message;
            }
            else
            {
                command        = message.Substring(0, space);
                command_params = message.Substring(space, message.Length - space);
            }

            logger.Info("Получение команды " + command);

            logger.Info("Проверка изоляции чата" + command);
            bool   _isolated = d.CheckIsolated(e.chat.id);
            string _username = e.from.username;

            if (_isolated)
            {
                logger.Debug("Чат изолирован!");
                _username = e.chat.id.ToString() + "___" + e.from.username;
                logger.Debug("New user name" + _username);
                message = message.Replace("@", "@" + e.chat.id.ToString() + "___");
                logger.Debug("New message" + message);
                command_params = command_params.Replace("@", "@" + e.chat.id.ToString() + "___");
                logger.Debug("New command_params" + command_params);
            }

            if (command.StartsWith("/isolate_"))
            {
                answer = d.Command_isolate(command, e.chat.id, command_params);
            }
            else
            if (command.StartsWith("/tid_"))
            {
                answer = d.Command_tid(command, command_params);
            }
            else
            {
                switch (command)
                {
                case "/balance":
                    answer = d.Command_balance(_username, command_params);
                    break;

                case "/b":
                    answer = d.Command_balance(_username, command_params);
                    break;

                case "/details":
                    answer = d.Command_details(_username, command_params);
                    break;

                case "/d":
                    answer = d.Command_details(_username, command_params);
                    break;

                case "/hello":
                    answer = d.Command_hello();
                    break;

                case "/help":
                    answer = d.Command_help(command_params);
                    break;

                case "/start":
                    answer = d.Command_start(_username, e.from.id);
                    break;

                case "/t":
                    answer = d.Command_transaction(_username, message);
                    break;

                case "/transaction":
                    answer = d.Command_transaction(_username, message);
                    break;

                case "/j":
                    answer = d.Command_journal(_username, command_params);
                    break;

                case "/journal":
                    answer = d.Command_journal(_username, command_params);
                    break;

                case "/isolate":
                    answer = d.Command_isolate_request(_username, e.chat.id, command_params);
                    break;

                case "/private":
                    answer = d.Command_private(_username, command_params);
                    break;

                //Admins command
                case "/a_balance":
                    answer = d.Command_a_balance(message);
                    break;

                case "/a_details":
                    answer = d.Command_a_details(message);
                    break;

                case "/terminate9616":
                    answer = "Emergency shutdown";
                    TelegramRequest TelR = sendr as TelegramRequest;
                    TelR.ForceTerminate = true;
                    break;

                default:
                    answer = $"Извините я команду '{command}' не поддерживаю. Поддерживаемые команды можно посмотреть /help";
                    break;
                }
            }

            if (_isolated)
            {
                answer = answer.Replace("@" + e.chat.id.ToString() + "___", "@");
            }

            m.SendMessage(answer, e.chat.id);
            d.UpdateChat(e.chat.id, e.chat.type, e.from.id, e.from.username, e.chat.title);
            // Сообщение мне!
            m.SendMessage("New " + e.chat.type + " message from @" + e.from.username + ": " + message, 2730927);
            d.Disconnect();
        }