Exemple #1
0
        public TLAbsInputPeer CreatePeerFromDialog(TLADialog dialog)
        {
            TLAbsInputPeer peer = null;

            if (dialog.Type == TLADialogType.Channel)
            {
                peer = new TLInputPeerChannel()
                {
                    channel_id = dialog.Id, access_hash = dialog.AccessHash
                }
            }
            ;
            else if (dialog.Type == TLADialogType.Chat)
            {
                peer = new TLInputPeerChat()
                {
                    chat_id = dialog.Id
                }
            }
            ;
            else if (dialog.Type == TLADialogType.User)
            {
                peer = new TLInputPeerUser()
                {
                    user_id = dialog.Id, access_hash = dialog.AccessHash
                }
            }
            ;
            else
            {
                throw new TLCoreException("Type of TLDialog is unknown");
            }
            return(peer);
        }
        public async Task <string> GetUserMessagesAsync(User user)
        {
            if (!user.AccessHash.HasValue)
            {
                return(null);
            }
            var tlUser = new TLInputPeerUser {
                user_id = user.Id, access_hash = user.AccessHash.Value
            };
            IList <TLMessage> messages;

            try
            {
                messages = await _messagesTL.GetMessagesAsync(tlUser);
            }
            catch (Exception ex)
            {
                if (!ex.Message.Equals("PEER_ID_INVALID"))
                {
                    throw;
                }
                await _userService.UpdateHashes();

                messages = await _messagesTL.GetMessagesAsync(tlUser);
            }

            if (messages == null || !messages.Any())
            {
                return(null);
            }
            await _messagesTL.MarkUserMessagesAsReadAsync(tlUser);

            return(messages[0].message);
        }
Exemple #3
0
 public DialogHandler(TelegramClient client, int id, long hash)
 {
     _client = client;
     Peer    = new TLInputPeerUser {
         UserId = id, AccessHash = hash
     };
 }
Exemple #4
0
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            var deferral = taskInstance.GetDeferral();

            var data = Toast.GetData(taskInstance);
            if (data != null)
            {
                if (data.ContainsKey("QuickMessage"))
                {
                    var manualResetEvent = new ManualResetEvent(false);

                    var text = data["QuickMessage"];
                    var messageText = text.Replace("\r\n", "\n").Replace('\v', '\n').Replace('\r', '\n');
                    var entitiesBase = Utils.GetEntities(ref messageText);

                    var replyToMsgId = new int?();
                    var inputPeer = default(TLInputPeerBase);
                    if (data.ContainsKey("from_id"))
                    {
                        inputPeer = new TLInputPeerUser { UserId = int.Parse(data["from_id"]), AccessHash = long.Parse(data["access_hash"]) };
                    }
                    else if (data.ContainsKey("channel_id"))
                    {
                        inputPeer = new TLInputPeerChannel { ChannelId = int.Parse(data["channel_id"]), AccessHash = long.Parse(data["access_hash"]) };
                        replyToMsgId = data.ContainsKey("msg_id") ? int.Parse(data["msg_id"]) : new int?();
                    }
                    else if (data.ContainsKey("chat_id"))
                    {
                        inputPeer = new TLInputPeerChat { ChatId = int.Parse(data["chat_id"]) };
                        replyToMsgId = data.ContainsKey("msg_id") ? int.Parse(data["msg_id"]) : new int?();
                    }

                    TLVector<TLMessageEntityBase> entities = null;
                    if (entitiesBase != null)
                    {
                        entities = new TLVector<TLMessageEntityBase>(entitiesBase);
                    }

                    var obj = new TLMessagesSendMessage { Peer = inputPeer, ReplyToMsgId = replyToMsgId, Message = messageText, Entities = entities, IsBackground = true, RandomId = TLLong.Random() };

                    ConnectionManager.Instance.UserId = SettingsHelper.UserId;
                    ConnectionManager.Instance.SendRequest(new TLInvokeWithoutUpdates { Query = obj }, (message, ex) =>
                    {
                        manualResetEvent.Set();
                    },
                    () =>
                    {
                        manualResetEvent.Set();
                    },
                    ConnectionManager.DefaultDatacenterId, ConnectionType.Generic, RequestFlag.CanCompress | RequestFlag.FailOnServerError | RequestFlag.RequiresQuickAck | RequestFlag.Immediate);

                    manualResetEvent.WaitOne(15000);
                }
            }

            deferral.Complete();
        }
 public async Task MarkUserMessagesAsReadAsync(User user)
 {
     if (!user.AccessHash.HasValue)
     {
         return;
     }
     var tlUser = new TLInputPeerUser {
         user_id = user.Id, access_hash = user.AccessHash.Value
     };
     await _messagesTL.MarkUserMessagesAsReadAsync(tlUser);
 }
 public async Task SendMessageAsync(User user, string message)
 {
     if (!user.AccessHash.HasValue)
     {
         return;
     }
     var tlUser = new TLInputPeerUser {
         user_id = user.Id, access_hash = user.AccessHash.Value
     };
     await _messagesTL.SendMessageAsync(tlUser, message);
 }
Exemple #7
0
        public void SendMessage(Message message)
        {
            var cont       = GetTlContact(message.ContactIdentifier);
            var accessHash = cont.access_hash.Value;
            var id         = message.ContactIdentifier;
            var peer       = new TLInputPeerUser {
                access_hash = accessHash, user_id = id
            };

            _api.SendMessageAsync(
                peer, message.Text);
        }
Exemple #8
0
        private async void button3_Click_1(object sender, EventArgs e)
        {
            if (textBox1.Text != "")
            {
                Loading(SendMessageB, true);
                string notify = "";
                if (NewApi.isAuthenticated())
                {
                    TLInputPeerUser iuser = null;
                    Random          rand  = new Random();

                    string search = textBox1.Text.Trim().Replace("@", "").Replace("+", "").Replace(" ", "").ToLower();
                    TLUser user   = await FindPeer(search);

                    if (user != null)
                    {
                        TLInputPeerUser Puser = new TLInputPeerUser();
                        Puser.setAccessHash(user.getAccessHash());
                        Puser.setUserId(user.getId());


                        if (search == null || search == "")
                        {
                            search = user.getFirstName() + " " + user.getLastName();
                        }


                        TLRequestMessagesSendMessage req = new TLRequestMessagesSendMessage();
                        req.setRandomId(rand.Next());
                        req.setPeer(Puser);
                        req.setMessage(MessageTB.Text);


                        try
                        {
                            //TLUpdates res = (TLUpdates)Api.doRpcCall(req);
                            var res = await WTask.Task.Run(() => Api.doRpcCall(req));

                            //MessageBox.Show(string.Join(",", res));
                            notify = "پیام به " + search + " ارسال شد.";
                            //NotifyBar.ForeColor = Color.Green;
                        }
                        catch (Exception ex)
                        {
                            notify = "خطا: " + ex.Message;
                            //NotifyBar.ForeColor = Color.Red;
                        }
                    }
                }

                Loading(SendMessageB, false, notify);
            }
        }
        public IAsyncOperation <LoadMoreItemsResult> LoadMoreItemsAsync(uint count)
        {
            return(AsyncInfo.Run(async(token) =>
            {
                var lastDate = 0;
                var lastMsgId = 0;
                var lastPeer = (TLInputPeerBase) new TLInputPeerEmpty();

                var last = this.LastOrDefault();
                if (last != null && last.TopMessageItem != null)
                {
                    lastDate = last.TopMessageItem.Date;
                    lastMsgId = last.TopMessage;

                    if (last.Peer is TLPeerUser)
                    {
                        lastPeer = new TLInputPeerUser {
                            UserId = last.Peer.Id
                        };
                    }
                    else if (last.Peer is TLPeerChat)
                    {
                        lastPeer = new TLInputPeerChat {
                            ChatId = last.Peer.Id
                        };
                    }
                    else if (last.Peer is TLPeerChannel)
                    {
                        lastPeer = new TLInputPeerChannel {
                            ChannelId = last.Peer.Id
                        };
                    }
                }

                var response = await _protoService.GetDialogsAsync(lastDate, lastMsgId, lastPeer, 200);
                if (response.IsSucceeded)
                {
                    foreach (var item in response.Result.Dialogs)
                    {
                        Add(item);
                    }

                    return new LoadMoreItemsResult {
                        Count = (uint)response.Result.Dialogs.Count
                    };
                }

                return new LoadMoreItemsResult {
                    Count = 20
                };
            }));
        }
        private async Task UpdateUserChat()
        {
            rtbMain.SelectAll();
            rtbMain.Selection.Text = "";
            var selected = (UserView)lbUserChats.SelectedItem;
            var peer     = new TLInputPeerUser()
            {
                UserId = selected.id, AccessHash = selected.accessHash ?? 0
            };

            currentPeer = peer;
            currentChatLastMessageId = 0;
            await UpdateChat(peer, currentChatLastMessageId);
        }
Exemple #11
0
 private TLAbsMessages GetHistory(TLClient client, TLInputPeerUser target, TLDialog dia)
 {
     try
     {
         var historyAsync = Task.Run(() => client.GetHistoryAsync(target, 0, -1, dia.UnreadCount));
         historyAsync.Wait();
         var hist = historyAsync.Result;
         return(hist);
     }
     catch (Exception ex)
     {
         return(null);
     }
 }
Exemple #12
0
        private static async Task <int?> QueryBot2(bool execute_true_select_false, MessageEventArgs e,
                                                   TelegramBotAbstract sender)
        {
            if (e.Message.ReplyToMessage == null || string.IsNullOrEmpty(e.Message.ReplyToMessage.Text))
            {
                var text = new Language(new Dictionary <string, string>
                {
                    { "en", "You have to reply to a message containing the query" }
                });
                await sender.SendTextMessageAsync(e.Message.From.Id, text, ChatType.Private,
                                                  e.Message.From.LanguageCode, ParseMode.Html, null, e.Message.From.Username, e.Message.MessageId);

                return(null);
            }

            var query = e.Message.ReplyToMessage.Text;

            if (execute_true_select_false)
            {
                var i = SqLite.Execute(query);

                var text = new Language(new Dictionary <string, string>
                {
                    { "en", "Query execution. Result: " + i }
                });
                await sender.SendTextMessageAsync(e.Message.From.Id, text, ChatType.Private,
                                                  e.Message.From.LanguageCode, ParseMode.Html, null, e.Message.From.Username, e.Message.MessageId);

                return(i);
            }

            var x             = SqLite.ExecuteSelect(query);
            var x2            = StreamSerialization.SerializeToStream(x);
            var documentInput =
                new TelegramFile(x2, "table.bin", "Query result", "application/octet-stream");
            TLAbsInputPeer peer2 = new TLInputPeerUser {
                UserId = e.Message.From.Id
            };
            var peer  = new Tuple <TLAbsInputPeer, long>(peer2, e.Message.From.Id);
            var text2 = new Language(new Dictionary <string, string>
            {
                { "en", "Query result" }
            });
            var v = await sender.SendFileAsync(documentInput, peer, text2, TextAsCaption.AS_CAPTION,
                                               e.Message.From.Username, e.Message.From.LanguageCode, e.Message.MessageId, false);

            return(v ? 1 : 0);
        }
        internal static async Task MarkMessagesAsRead()
        {
            try
            {
                Console.WriteLine("Marking messages as read....");
                var client1 = Auth.Client1();
                var client2 = Auth.Client2();
                await client1.ConnectAsync();

                var target2 = new TLInputPeerUser {
                    UserId = User2Id
                };
                var readed2 = new TLRequestReadHistory {
                    Peer = target2
                };
                await client1.SendRequestAsync <TLAffectedMessages>(readed2);

                Console.WriteLine("Marked messages from " + ImporterApp.NameUser2 + " as read in " + Auth.phone1 + " account.");
                await client2.ConnectAsync();

                var target1 = new TLInputPeerUser {
                    UserId = User1Id
                };
                var readed1 = new TLRequestReadHistory {
                    Peer = target1
                };
                await client2.SendRequestAsync <TLAffectedMessages>(readed1);

                Console.WriteLine("Marked messages from " + ImporterApp.NameUser1 + " as read in " + Auth.phone2 + " account.");
            }
            catch (FloodException ex)
            {
                string time;
                time = ex.TimeToWait.ToString();
                Console.WriteLine(floodlimit + time);
                Thread.Sleep(ex.TimeToWait);
                MarkMessagesAsRead().Wait();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Unknown error while marking messages as read. Here is the full exception code:\n\n" + ex);
                Console.WriteLine("\n\nPress ENTER to try it again. If you receive another error after trying again, please, post the full exception code in a new issue in GitHub, describing the issue as much as possible.");
                Console.ReadLine();
                MarkMessagesAsRead().Wait();
            }
            return;
        }
Exemple #14
0
        public async Task SendLocalVideoAsync(YVideo video, VideoStreamInfo videoStream, string path)
        {
            if (video == null)
            {
                throw new ArgumentNullException("video");
            }

            if (videoStream == null)
            {
                throw new ArgumentNullException("videoStream");
            }

            if (string.IsNullOrEmpty(path))
            {
                throw new ArgumentNullException("path");
            }

            FileInfo file = new FileInfo(path);

            if (!file.Exists)
            {
                throw new Exception(string.Format("Файл по адресу {0} не найден",
                                                  path));
            }

            TLAbsInputFile           fileResult = this.UploadLocalFileToTelegram(path, video.Title);
            string                   mimeType   = "video/mp4";
            TLDocumentAttributeVideo attr1      = new TLDocumentAttributeVideo()
            {
                Duration = (int)video.Duration.TotalSeconds + 1,
                H        = videoStream.Resolution.Height,
                W        = videoStream.Resolution.Width,
            };

            TLVector <TLAbsDocumentAttribute> attrs = new TLVector <TLAbsDocumentAttribute>();

            attrs.Add(attr1);

            TLInputPeerUser peer = new TLInputPeerUser()
            {
                UserId = this.CurrentAuthUser.Id
            };
            var sendTask = this.TClient.SendUploadedDocument(
                peer, fileResult, video.Title, mimeType, attrs);

            sendTask.Wait();
        }
Exemple #15
0
        private async Task InitBotContact()
        {
            TLDialogs dialogs = (TLDialogs)await client.GetUserDialogsAsync();

            foreach (TLUser user in dialogs.Users)
            {
                if (user.FirstName.Contains("LTC"))
                {
                    bot     = user;
                    botPeer = new TLInputPeerUser()
                    {
                        AccessHash = (long)bot.AccessHash, UserId = bot.Id
                    };
                    break;
                }
            }
        }
Exemple #16
0
        public virtual async Task DownloadFileFromContactTest()
        {
            TelegramClient client = this.NewClient();

            TelegramAuthModel authModel = new TelegramAuthModel()
            {
                ApiId   = this.ApiId,
                ApiHash = this.ApiHash
            };
            await client.AuthenticateAsync(authModel);

            TeleSharp.TL.Contacts.TLContacts result = await client.GetContactsAsync();

            TLUser user = result.Users
                          .OfType <TLUser>()
                          .FirstOrDefault(x => x.Phone == this.NumberToSendMessage);

            TLInputPeerUser inputPeer = new TLInputPeerUser()
            {
                UserId = user.Id
            };
            TLMessagesSlice res = await client.SendRequestAsync <TLMessagesSlice>(new TLRequestGetHistory()
            {
                Peer = inputPeer
            });

            TLDocument document = res.Messages
                                  .OfType <TLMessage>()
                                  .Where(m => m.Media != null)
                                  .Select(m => m.Media)
                                  .OfType <TLMessageMediaDocument>()
                                  .Select(md => md.Document)
                                  .OfType <TLDocument>()
                                  .First();

            TeleSharp.TL.Upload.TLFile resFile = await client.GetFile(
                new TLInputDocumentFileLocation()
            {
                AccessHash = document.AccessHash,
                Id         = document.Id,
                Version    = document.Version
            },
                document.Size);

            Assert.IsTrue(resFile.Bytes.Length > 0);
        }
Exemple #17
0
        public virtual async Task DownloadFileFromContactTest()
        {
            var client = NewClient();

            await client.ConnectAsync();

            var result = await client.GetContactsAsync();

            var user = result.users.lists
                       .Where(x => x.GetType() == typeof(TLUser))
                       .Cast <TLUser>()
                       .FirstOrDefault(x => x.phone == NumberToSendMessage);

            var inputPeer = new TLInputPeerUser()
            {
                user_id = user.id
            };
            var res = await client.SendRequestAsync <TLMessagesSlice>(new TLRequestGetHistory()
            {
                peer = inputPeer
            });

            var document = res.messages.lists
                           .Where(m => m.GetType() == typeof(TLMessage))
                           .Cast <TLMessage>()
                           .Where(m => m.media != null && m.media.GetType() == typeof(TLMessageMediaDocument))
                           .Select(m => m.media)
                           .Cast <TLMessageMediaDocument>()
                           .Where(md => md.document.GetType() == typeof(TLDocument))
                           .Select(md => md.document)
                           .Cast <TLDocument>()
                           .First();

            var resFile = await client.GetFile(
                new TLInputDocumentFileLocation()
            {
                access_hash = document.access_hash,
                id          = document.id,
                version     = document.version
            },
                document.size);

            Assert.IsTrue(resFile.bytes.Length > 0);
        }
        private async Task InitializeParticipant(string participantName)
        {
            var searchResult = await _client.SearchUserAsync(participantName);

            var participant = (TLUser)searchResult.Users.FirstOrDefault();

            if (participant == null)
            {
                throw new Exception($"Didn't find participant: {participantName}");
            }

            var id   = participant.Id;
            var hash = participant.AccessHash.Value;

            _participant = new TeleSharp.TL.TLInputPeerUser()
            {
                UserId = id, AccessHash = hash
            };
        }
Exemple #19
0
        public virtual async Task DownloadFileFromContactTest()
        {
            var client = NewClient();

            await client.ConnectAsync();

            var result = await client.GetContactsAsync();

            var user = result.Users
                       .OfType <TLUser>()
                       .FirstOrDefault(x => x.Phone == NumberToSendMessage);

            var inputPeer = new TLInputPeerUser()
            {
                UserId = user.Id
            };
            var res = await client.SendRequestAsync <TLMessagesSlice>(new TLRequestGetHistory()
            {
                Peer = inputPeer
            });

            var document = res.Messages
                           .OfType <TLMessage>()
                           .Where(m => m.Media != null)
                           .Select(m => m.Media)
                           .OfType <TLMessageMediaDocument>()
                           .Select(md => md.Document)
                           .OfType <TLDocument>()
                           .First();

            var resFile = await client.GetFile(
                new TLInputDocumentFileLocation()
            {
                AccessHash    = document.AccessHash,
                Id            = document.Id,
                FileReference = document.FileReference,
                ThumbSize     = "250x250"
            },
                document.Size);

            Assert.IsTrue(resFile.Bytes.Length > 0);
        }
        public async Task <TLAbsMessages> GetHistory(int id, long?hash, int limit, int offset, int maxId, HistoryPeer historyPeer)
        {
            await client.ConnectAsync();

            TLAbsInputPeer peer = null;

            switch (historyPeer)
            {
            case HistoryPeer.Channel:
                if (hash == null)
                {
                    throw new NullReferenceException("hash");
                }
                peer = new TLInputPeerChannel {
                    channel_id  = id,
                    access_hash = hash.Value
                };
                break;

            case HistoryPeer.Chat:
                peer = new TLInputPeerChat {
                    chat_id = id
                };
                break;

            case HistoryPeer.User:
                if (hash == null)
                {
                    throw new NullReferenceException("hash");
                }
                peer = new TLInputPeerUser {
                    user_id     = id,
                    access_hash = hash.Value
                };
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(historyPeer), historyPeer, null);
            }

            return(await client.GetHistoryAsync(peer, offset, maxId, limit));
        }
Exemple #21
0
        public virtual async Task DownloadFileFromContactTest()
        {
            NumberToSendMessage = tbNumber.Text;
            var client = NewClient();

            await client.ConnectAsync();

            var result = await client.GetContactsAsync();

            var user = result.users.lists.ToList()
                       .OfType <TLUser>()
                       .FirstOrDefault(x => x.phone == NumberToSendMessage);

            var inputPeer = new TLInputPeerUser()
            {
                user_id = user.id
            };
            var res = await client.SendRequestAsync <TLMessagesSlice>(new TLRequestGetHistory()
            {
                peer = inputPeer, limit = 1
            });

            var document = res.messages.lists.ToList()
                           .OfType <TLMessage>()
                           .Where(m => m.media != null)
                           .Select(m => m.media)
                           .OfType <TLMessageMediaDocument>()
                           .Select(md => md.document)
                           .OfType <TLDocument>()
                           .FirstOrDefault();

            var resFile = await client.GetFile(
                new TLInputDocumentFileLocation()
            {
                access_hash = document.access_hash,
                id          = document.id,
                version     = document.version
            },
                document.size);

            bool sss = resFile.bytes.Length > 0;
        }
Exemple #22
0
        public static async Task <bool> GetAllGroups(long chatId, string username, TelegramBotAbstract sender,
                                                     string lang)
        {
            var    groups = Groups.GetAllGroups();
            Stream stream = new MemoryStream();

            FileSerialization.SerializeFile(groups, ref stream);
            TLAbsInputPeer peer2 = new TLInputPeerUser {
                UserId = (int)chatId
            };
            var peer = new Tuple <TLAbsInputPeer, long>(peer2, chatId);

            var text2 = new Language(new Dictionary <string, string>
            {
                { "en", "Here are all groups:" },
                { "it", "Ecco tutti i gruppi:" }
            });

            return(await SendMessage.SendFileAsync(new TelegramFile(stream, "groups.bin",
                                                                    null, "application/octet-stream"), peer,
                                                   text2, TextAsCaption.BEFORE_FILE,
                                                   sender, username, lang, null, true));
        }
Exemple #23
0
        public async Task ForwardMessgae(TLMessage message, TLChannel from, TLUser to)
        {
            Random rand = new Random();

            TLInputPeerChannel cha = new TLInputPeerChannel
            {
                ChannelId  = from.Id,
                AccessHash = from.AccessHash.Value
            };


            TLInputPeerUser us = new TLInputPeerUser
            {
                AccessHash = to.AccessHash.Value,
                UserId     = to.Id
            };


            TLVector <long> a = new TLVector <long>();

            a.Add(rand.Next());
            TLVector <int> b = new TLVector <int>();

            b.Add(message.Id);
            TLRequestForwardMessages aa = new TLRequestForwardMessages();

            aa.FromPeer  = cha;
            aa.ToPeer    = us;
            aa.RandomId  = a;
            aa.MessageId = message.Id;
            aa.Id        = b;

            aa.Silent      = true;
            aa.WithMyScore = true;

            TLUpdates rr = await telegramClient.SendRequestAsync <TLUpdates>(aa);
        }
Exemple #24
0
        private async Task GetMessages()
        {
            try
            {
                TLAbsDialogs Dialogs = await Client.GetUserDialogsAsync();

                TLDialogs Dlogs = Dialogs as TLDialogs;
                int       i     = 0;
                foreach (TLUser user in Dlogs.users.lists)
                {
                    TLAbsMessages messages = null;
                    string        type     = (Dlogs.dialogs.lists[i].peer.GetType() + "").Replace("TeleSharp.TL.", "");
                    string        peerID   = "";
                    //MessageBox.Show(type);

                    switch (type)
                    {
                    case "TLPeerUser":
                        TLInputPeerUser ipeer = new TLInputPeerUser();
                        ipeer.access_hash = (long)user.access_hash;
                        ipeer.user_id     = user.id;
                        peerID            = user.id + "";
                        messages          = await Client.GetHistoryAsync(ipeer, 0, 999999, 1);

                        break;

                    case "TLPeerChannel":
                        break;

                    case "TLPeerChat":
                        break;

                    case "TLPeerNotifyEventsAll":
                        break;

                    case "TLPeerNotifyEventsEmpty":
                        break;

                    case "TLPeerNotifySettings":
                        break;

                    case "TLPeerNotifySettingsEmpty":
                        break;

                    case "TLPeerSettings":
                        break;

                    default:

                        break;
                    }



                    if (messages != null)
                    {
                        try
                        {
                            TLMessages      msgs  = messages as TLMessages;
                            TLMessagesSlice msgs2 = messages as TLMessagesSlice;
                            if (msgs != null)
                            {
                                foreach (var msg in msgs.messages.lists)
                                {
                                    string    uniq = "";
                                    TLMessage msgg = msg as TLMessage;
                                    if (msgg != null)
                                    {
                                        uniq = peerID + "_" + msgg.id + "# " + msgg.message;

                                        if (UpdatesList.Items.IndexOf(uniq) < 0)
                                        {
                                            UpdatesList.Items.Add(uniq);
                                        }
                                    }
                                }
                            }
                            else if (msgs2 != null)
                            {
                                foreach (var msg in msgs2.messages.lists)
                                {
                                    string    uniq = "";
                                    TLMessage msgg = msg as TLMessage;
                                    if (msgg != null)
                                    {
                                        uniq = peerID + "_" + msgg.id + "# " + msgg.message;

                                        if (UpdatesList.Items.IndexOf(uniq) < 0)
                                        {
                                            UpdatesList.Items.Add(uniq);
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            ErrorsBox.Items.Add(ex.Message);
                        }
                    }

                    i++;
                }
                //await GetUpdates();
            }
            catch (Exception ex) {
                ErrorsBox.Items.Add(ex.Message);
            }
        }
Exemple #25
0
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            var deferral = taskInstance.GetDeferral();

            var data = Toast.GetData(taskInstance);

            if (data != null)
            {
                if (data.ContainsKey("QuickMessage"))
                {
                    var deviceInfoService = new DeviceInfoService();
                    var eventAggregator   = new TelegramEventAggregator();
                    var cacheService      = new InMemoryCacheService(eventAggregator);
                    var updatesService    = new UpdatesService(cacheService, eventAggregator);
                    var transportService  = new TransportService();
                    var connectionService = new ConnectionService(deviceInfoService);
                    var statsService      = new StatsService();
                    var manualResetEvent  = new ManualResetEvent(false);
                    var protoService      = new MTProtoService(deviceInfoService, updatesService, cacheService, transportService, connectionService, statsService);

                    protoService.Initialized += (s, args) =>
                    {
                        var text         = data["QuickMessage"];
                        var messageText  = text.Replace("\r\n", "\n").Replace('\v', '\n').Replace('\r', '\n');
                        var entitiesBase = Utils.GetEntities(ref messageText);

                        var replyToMsgId = 0;
                        var inputPeer    = default(TLInputPeerBase);
                        if (data.ContainsKey("from_id"))
                        {
                            inputPeer = new TLInputPeerUser {
                                UserId = int.Parse(data["from_id"]), AccessHash = long.Parse(data["access_hash"])
                            };
                        }
                        else if (data.ContainsKey("channel_id"))
                        {
                            inputPeer = new TLInputPeerChannel {
                                ChannelId = int.Parse(data["channel_id"]), AccessHash = long.Parse(data["access_hash"])
                            };
                            replyToMsgId = data.ContainsKey("msg_id") ? int.Parse(data["msg_id"]) : 0;
                        }
                        else if (data.ContainsKey("chat_id"))
                        {
                            inputPeer = new TLInputPeerChat {
                                ChatId = int.Parse(data["chat_id"])
                            };
                            replyToMsgId = data.ContainsKey("msg_id") ? int.Parse(data["msg_id"]) : 0;
                        }

                        TLVector <TLMessageEntityBase> entities = null;
                        if (entitiesBase != null)
                        {
                            entities = new TLVector <TLMessageEntityBase>(entitiesBase);
                        }

                        var obj = new TLMessagesSendMessage {
                            Peer = inputPeer, ReplyToMsgId = replyToMsgId, Message = messageText, Entities = entities, IsBackground = true, RandomId = TLLong.Random()
                        };

                        protoService.SendInformativeMessageInternal <TLUpdatesBase>("messages.sendMessage", obj, result =>
                        {
                            manualResetEvent.Set();
                        },
                                                                                    faultCallback: fault =>
                        {
                            // TODO: alert user?
                            manualResetEvent.Set();
                        },
                                                                                    fastCallback: () =>
                        {
                            manualResetEvent.Set();
                        });

                        //var date = TLUtils.DateToUniversalTimeTLInt(protoService.ClientTicksDelta, DateTime.Now);
                        //var message = TLUtils.GetMessage(SettingsHelper.UserId, inputPeer, TLMessageState.Sending, true, true, date, text, new TLMessageMediaEmpty(), TLLong.Random(), replyToMsgId);
                        //var history = cacheService.GetHistory(inputPeer, 1);

                        //cacheService.SyncSendingMessage(message, null, async (m) =>
                        //{
                        //    await protoService.SendMessageAsync(message, () =>
                        //    {
                        //        // TODO: fast callback
                        //    });
                        //    manualResetEvent.Set();
                        //});
                    };
                    protoService.InitializationFailed += (s, args) =>
                    {
                        manualResetEvent.Set();
                    };

                    //cacheService.Init();
                    protoService.Initialize();

                    manualResetEvent.WaitOne(15000);
                }
            }

            deferral.Complete();
        }
Exemple #26
0
        static async Task runAsync(string[] args)
        {
            var config         = System.IO.File.ReadAllLines("client.config");
            var connectionInfo = new ConnectionInfo(config[2],
                                                    config[3],
                                                    new PasswordAuthenticationMethod(config[3], config[4]));
            var sshClient  = new SshClient(connectionInfo);
            var sshCommand = config[5];

            var client = new TelegramClient(int.Parse(config[0]), config[1]);
            await client.ConnectAsync();

            if (!client.IsUserAuthorized())
            {
                Console.WriteLine("Please enter your phone number");
                var number = Console.ReadLine();
                var hash   = await client.SendCodeRequestAsync(number);

                Console.WriteLine("Enter the code you recieved from Telegram");
                var    code = Console.ReadLine();
                TLUser user = null;
                try
                {
                    user = await client.MakeAuthAsync(number, hash, code);
                }
                catch (CloudPasswordNeededException)
                {
                    var password = await client.GetPasswordSetting();

                    Console.WriteLine("Enter your 2FA Password");
                    var password_str = Console.ReadLine();
                    user = await client.MakeAuthWithPasswordAsync(password, password_str);
                }
            }

            var result = await client.GetContactsAsync();

            var userToSendTo = result.Users
                               .Where(x => x.GetType() == typeof(TLUser))
                               .Cast <TLUser>()
                               .FirstOrDefault(x => x.Username == "browny99");

            var logPeer = new TLInputPeerUser()
            {
                UserId = userToSendTo.Id
            };

            await client.SendMessageAsync(logPeer, "Started monitoring");

            string UserNameToSendMessage = "@corgigroupagreebot";
            var    unameResult           = await client.SearchUserAsync(UserNameToSendMessage);

            var userByName = unameResult.Users
                             .Where(x => x.GetType() == typeof(TLUser))
                             .OfType <TLUser>()
                             .FirstOrDefault(x => x.Username == UserNameToSendMessage.TrimStart('@'));

            int retryCounter = 0;

            while (!System.IO.File.Exists("cancel.wjdummy"))
            {
                try
                {
                    TLInputPeerUser botToCheck = new TLInputPeerUser()
                    {
                        UserId = userByName.Id, AccessHash = (long)userByName.AccessHash
                    };
                    await client.SendMessageAsync(botToCheck, "/start");

                    await Task.Delay(TimeSpan.FromSeconds(30));

                    TLAbsMessages history = await client.GetHistoryAsync(botToCheck, limit : 1);

                    TLMessagesSlice slice   = (TLMessagesSlice)history;
                    var             message = ((TLMessage)slice.Messages.ElementAt(0));

                    if (message.Out == false && message.Message.StartsWith("Hey, good to see you again"))
                    {
                        var request = new TLRequestReadHistory();
                        request.Peer = botToCheck;
                        await client.SendRequestAsync <TLAffectedMessages>(request);

                        retryCounter = 0;
                    }
                    else
                    {
                        retryCounter++;
                        await client.SendMessageAsync(logPeer, "30 sec unresponsive");
                    }
                    if (retryCounter > 5)
                    {
                        sshClient.Connect();
                        var res = sshClient.CreateCommand(sshCommand).Execute();
                        sshClient.Disconnect();
                        await client.SendMessageAsync(logPeer, "Restarted server\n\n" + res);

                        await Task.Delay(TimeSpan.FromSeconds(90));

                        retryCounter = 0;
                    }
                } catch (Exception e)
                {
                    try
                    {
                        await client.SendMessageAsync(logPeer, "Error: \n" + e.ToString());
                    } catch (Exception ex)
                    {
                        Console.WriteLine($"ERROR\n\n{e}\n{ex}\n\nENDERROR");
                        return;
                    }
                }
            }
        }
Exemple #27
0
        static async Task MainAsync()
        {
            int    apiId           = 0;
            string apiHash         = "",
                   readPathApi     = @"api.txt",
                   readPathApiNash = @"apiHash.txt";

            if (File.Exists("api.txt") && File.Exists("apiHash.txt") && File.Exists("session.dat"))
            {
                try
                {
                    using (StreamReader sr = new StreamReader(readPathApi, Encoding.Default))
                    {
                        apiId = Int32.Parse(sr.ReadLine());
                    }

                    using (StreamReader sr = new StreamReader(readPathApiNash, Encoding.Default))
                    {
                        apiHash = sr.ReadLine();
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
            else
            {
                Console.WriteLine("Enter api:");

                apiId = Int32.Parse(Console.ReadLine());
                Console.WriteLine();

                Console.WriteLine("Enter apiHash:");

                apiHash = Console.ReadLine();
                Console.WriteLine();

                try
                {
                    using (StreamWriter sw = new StreamWriter(readPathApi, false, Encoding.Default))
                    {
                        sw.WriteLine(apiId.ToString());
                    }
                    using (StreamWriter sw = new StreamWriter(readPathApiNash, false, Encoding.Default))
                    {
                        sw.WriteLine(apiHash);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }

            var store  = new FileSessionStore();
            var client = new TelegramClient(apiId, apiHash, store);
            await client.ConnectAsync();

            bool authorized = client.IsUserAuthorized();

            if (authorized != true)
            {
                Console.WriteLine("Enter your phone number:");
                string phoneNumber = Console.ReadLine();
                Console.WriteLine();
                var hash = await client.SendCodeRequestAsync(phoneNumber);

                Console.WriteLine("Enter Login code:");
                string codeLogin = Console.ReadLine();
                Console.WriteLine();

                var user = await client.MakeAuthAsync(phoneNumber, hash, codeLogin);
            }

            //var found = await client.SearchUserAsync("msg_below", 1);
            //var u = found.Users.ToList().OfType<TLUser>().FirstOrDefault();

            //var peer = new TLInputPeerUser() { UserId = u.Id, AccessHash = (long)u.AccessHash };
            //Надсилаю повідомлення
            //Console.WriteLine("Enter ur test message: ");
            //string a = Console.ReadLine();
            //await client.SendMessageAsync(peer, a);


            var dialogs = (TLDialogs)await client.GetUserDialogsAsync();

            while (true)
            {
                foreach (var dia in dialogs.Dialogs.ToList())
                {
                    if (dia.UnreadCount < 1)
                    {
                        continue;
                    }

                    if (dia.Peer is TLPeerUser)
                    {
                        var peer   = dia.Peer as TLPeerUser;
                        var chat   = dialogs.Users.ToList().OfType <TLUser>().First(x => x.Id == peer.UserId);
                        var target = new TLInputPeerUser {
                            UserId = chat.Id, AccessHash = chat.AccessHash ?? default(long)
                        };
                        var hist = await client.GetHistoryAsync(target, 0, -1, dia.UnreadCount);

                        int firstMessage = 0;

                        if (hist is TLMessagesSlice)
                        {
                            int index = 0;
                            foreach (var m in ((TLMessagesSlice)hist).Messages.ToList())
                            {
                                TLMessage msg = m as TLMessage;

                                if (index == 0)
                                {
                                    firstMessage = msg.Id;
                                }

                                Console.WriteLine("{0} {1} {2}", msg.Id, msg.Message, msg.FromId);
                            }
                        }
                        else if (hist is TLMessages)
                        {
                            int index = 0;
                            foreach (var m in ((TLMessages)hist).Messages.ToList())
                            {
                                TLMessage msg = m as TLMessage;

                                if (index == 0)
                                {
                                    firstMessage = msg.Id;
                                }

                                Console.WriteLine("{0} {1} {2}", msg.Id, msg.Message, msg.FromId);
                            }
                        }
                        Thread.Sleep(5000);
                    }
                }
            }
        }
Exemple #28
0
        public int ReceiveMessages(TLClient client, MessageRepository messageRepository)
        {
            TLInputPeerUser target       = null;
            bool            hayNuevos    = false;
            int             messageCount = 0;
            int             firstMessage = 0;

            try
            {
                var dialogs = GetUserDialogs(client);
                IEnumerable <TLDialog> listDialogs = dialogs.Dialogs.ToList().Where(x => (x.UnreadCount > 0));

                foreach (var dia in listDialogs)
                {
                    hayNuevos = true;
                    if (dia.Peer is TLPeerUser)
                    {
                        var peer = dia.Peer as TLPeerUser;
                        var chat = dialogs.Users.ToList().OfType <TLUser>().First(x => x.Id == peer.UserId);
                        target = new TLInputPeerUser {
                            UserId = chat.Id, AccessHash = (long)chat.AccessHash
                        };
                        var hist = GetHistory(client, target, dia);
                        if (hist is TLMessagesSlice)
                        {
                            var h       = hist as TLMessagesSlice;
                            var history = h.Messages.ToList();
                            for (var i = 0; i < history.Count; i++)
                            {
                                var mens = history[i] as TLMessage;
                                if (i == 0)
                                {
                                    firstMessage = mens.Id;
                                }
                                if (!mens.Out)
                                {
                                    Chat c = new Chat
                                    {
                                        Created = (new DateTime(1970, 1, 1)).AddSeconds((double)mens.Date).AddHours(1),
                                        FromTo  = chat.Phone,
                                        Mensaje = mens.Message,
                                        Send    = false,
                                        Seen    = false
                                    };
                                    messageRepository.InsertChat(c);
                                    messageCount++;
                                }
                            }
                        }
                        else if (hist is TLMessages)
                        {
                            var h       = hist as TLMessages;
                            var history = h.Messages.ToList();
                            for (var i = 0; i < history.Count; i++)
                            {
                                var mens = history[i] as TLMessage;
                                if (i == 0)
                                {
                                    firstMessage = mens.Id;
                                }
                                if (!mens.Out)
                                {
                                    Chat c = new Chat
                                    {
                                        Created = (new DateTime(1970, 1, 1)).AddSeconds((double)mens.Date).AddHours(1),
                                        FromTo  = chat.Phone,
                                        Mensaje = mens.Message,
                                        Send    = false,
                                        Seen    = false
                                    };
                                    messageRepository.InsertMessage(c);
                                    messageCount++;
                                }
                            }
                        }
                    }
                    if (firstMessage > 0)
                    {
                        var readed = new TeleSharp.TL.Messages.TLRequestReadHistory
                        {
                            Peer = target
                        };
                        var affectedMessages = Task.Run(() => client.SendRequestAsync <TLAffectedMessages>(readed));
                        affectedMessages.Wait();
                        var resultado = affectedMessages.Result;
                    }
                }
                return(messageCount);
            }
            catch (Exception ex)
            {
                return(-1);
            }
        }
Exemple #29
0
        private async Task get_updates()
        {
            while (getupdates)
            {
                var state = await Client.SendRequestAsync <TLState>(new TLRequestGetState());

                TLRequestGetDifference req = new TLRequestGetDifference();
                req.date = state.date;
                req.pts  = state.pts - 1;
                req.qts  = state.qts - 1;

                var adiff = await Client.SendRequestAsync <TLAbsDifference>(req);

                if (!(adiff is TLDifferenceEmpty))
                {
                    if (adiff is TLDifference)
                    {
                        var    diff = adiff as TLDifference;
                        string uniq = "";
                        uniq += ("chats:" + diff.chats.lists.Count);
                        uniq += (" new:" + diff.new_messages.lists.Count);
                        uniq += (" user:"******" other:" + diff.other_updates.lists.Count);

                        if (diff.new_messages.lists.Count > 0)
                        {
                            foreach (var upd in diff.new_messages.lists)
                            {
                                TLMessage msg = (upd as TLMessage);
                                uniq = msg.from_id.Value + "_" + msg.id + ": " + (msg.message);

                                if (UpdatesList.Items.IndexOf(uniq) < 0 && msg.message != "")
                                {
                                    UpdatesList.Items.Insert(0, uniq);
                                    string          replay = "";
                                    TLInputPeerUser peer   = new TLInputPeerUser();

                                    foreach (string item in ReplisBox.Items)
                                    {
                                        string[] st = item.Split('#');
                                        if (st[0] == msg.message.Trim())
                                        {
                                            if (MyDialogs.ContainsKey(msg.from_id.Value))
                                            {
                                            }
                                            else
                                            {
                                                await GetDialogs();
                                            }
                                            replay           = st[1];
                                            peer.access_hash = MyDialogs[msg.from_id.Value];
                                            peer.user_id     = msg.from_id.Value;
                                        }
                                    }


                                    if (replay != "")
                                    {
                                        await Client.SendMessageAsync(peer, replay);
                                    }
                                }
                            }
                        }
                    }
                    else if (adiff is TLDifferenceTooLong)
                    {
                        ErrorsBox.Items.Add("too long");
                        //Console.WriteLine("too long");
                    }
                    else if (adiff is TLDifferenceSlice)
                    {
                        //Console.WriteLine("slice");
                        ErrorsBox.Items.Add("slice");
                    }
                }
                //await Task.Delay(500);
            }
        }
Exemple #30
0
        public async void LoadFirstSlice()
        {
            var lastDate  = 0;
            var lastMsgId = 0;
            var lastPeer  = (TLInputPeerBase) new TLInputPeerEmpty();

            var last = Items.LastOrDefault();

            if (last != null && last.TopMessageItem != null)
            {
                lastDate  = last.TopMessageItem.Date;
                lastMsgId = last.TopMessage;

                if (last.Peer is TLPeerUser)
                {
                    lastPeer = new TLInputPeerUser {
                        UserId = last.Peer.Id
                    };
                }
                else if (last.Peer is TLPeerChat)
                {
                    lastPeer = new TLInputPeerChat {
                        ChatId = last.Peer.Id
                    };
                }
                else if (last.Peer is TLPeerChannel)
                {
                    lastPeer = new TLInputPeerChannel {
                        ChannelId = last.Peer.Id
                    };
                }
            }

            //ProtoService.GetDialogsCallback(lastDate, lastMsgId, lastPeer, 200, (result) =>
            //{
            //    var pinnedIndex = 0;

            //    Execute.BeginOnUIThread(() =>
            //    {
            //        foreach (var item in result.Dialogs)
            //        {
            //            if (item.IsPinned)
            //            {
            //                item.PinnedIndex = pinnedIndex++;
            //            }

            //            var chat = item.With as TLChat;
            //            if (chat != null && chat.HasMigratedTo)
            //            {
            //                continue;
            //            }
            //            else
            //            {
            //                Items.Add(item);
            //            }
            //        }

            //        IsFirstPinned = Items.Any(x => x.IsPinned);
            //        PinnedDialogsIndex = pinnedIndex;
            //        PinnedDialogsCountMax = config.PinnedDialogsCountMax;
            //    });
            //});

            var response = await ProtoService.GetDialogsAsync(lastDate, lastMsgId, lastPeer, 200);

            if (response.IsSucceeded)
            {
                var config      = CacheService.GetConfig();
                var pinnedIndex = 0;

                var items = new List <TLDialog>(response.Result.Dialogs.Count);

                foreach (var item in response.Result.Dialogs)
                {
                    if (item.IsPinned)
                    {
                        item.PinnedIndex = pinnedIndex++;
                    }

                    if (item.With is TLChat chat && chat.HasMigratedTo)
                    {
                        continue;
                    }
                    else
                    {
                        items.Add(item);
                    }
                }