public async Task <ChannelFull> GetFullChannelAsync(int channelId, long accessHash) { var req = new TLRequestGetFullChannel() { Channel = new TLInputChannel() { ChannelId = channelId, AccessHash = accessHash } }; TeleSharp.TL.Messages.TLChatFull fullChat; try { fullChat = await _client.SendRequestAsync <TeleSharp.TL.Messages.TLChatFull>(req); } catch (InvalidOperationException) { return(null); } var fullChannel = (TLChannelFull)fullChat.FullChat; return(new ChannelFull() { ChannelId = fullChannel.Id, About = fullChannel.About, ParticipantsCount = fullChannel.ParticipantsCount ?? 0 }); }
public async Task <Channel> GetChannelAsync(int channelId, long accessHash) { var req = new TLRequestGetFullChannel() { Channel = new TLInputChannel() { ChannelId = channelId, AccessHash = accessHash } }; TeleSharp.TL.Messages.TLChatFull fullChat; try { fullChat = await _client.SendRequestAsync <TeleSharp.TL.Messages.TLChatFull>(req); } catch (InvalidOperationException) { return(null); } TLChannel channel = (TLChannel)fullChat.Chats[0]; return(new Channel() { ChannelId = channel.Id, AccessHash = channel.AccessHash ?? 0, Title = channel.Title, Username = channel.Username }); }
/// <summary> /// Возвращает код-во людей /// </summary> /// <param name="channelName"></param> /// <returns>Получение кол-во людей (int) в канале , если что-то пошло не так вернет -1</returns> public async Task <Int32> GetCountParticipantsChannelandSuperGroup(String channelName) { if (client == null) { return(-1); } TLAbsDialogs dialogs_temp = await client.GetUserDialogsAsync(); TLDialogsSlice dialogs = dialogs_temp as TLDialogsSlice; TeleSharp.TL.Messages.TLChatFull res = new TeleSharp.TL.Messages.TLChatFull(); try { TLChannel channelInfo = (await client.SendRequestAsync <TeleSharp.TL.Contacts.TLResolvedPeer>( new TeleSharp.TL.Contacts.TLRequestResolveUsername { Username = channelName }).ConfigureAwait(false)).Chats.Last() as TeleSharp.TL.TLChannel; TLRequestGetFullChannel req = new TLRequestGetFullChannel() { Channel = new TLInputChannel() { AccessHash = channelInfo.AccessHash.Value, ChannelId = channelInfo.Id } }; res = await client.SendRequestAsync <TeleSharp.TL.Messages.TLChatFull>(req); } catch { return(-1); } return((res.FullChat as TLChannelFull).ParticipantsCount.Value); }
public static async Task <ChannelInfo> GetChatInfo(string groupName) { if (!await AuthUser()) { return(null); } var result = new ChannelInfo(); var dialogs = (TLDialogs)await client.GetUserDialogsAsync(); var main = dialogs.chats.lists.Where(c => c.GetType() == typeof(TLChannel)) .Cast <TLChannel>() .FirstOrDefault(c => c.title == ("WereWuff - The Game")); var req = new TLRequestGetFullChannel() { channel = new TLInputChannel() { access_hash = main.access_hash.Value, channel_id = main.id } }; var res = await client.SendRequestAsync <TeleSharp.TL.Messages.TLChatFull>(req); //we have to do this in slices var offset = 0; result.Channel = main; result.ChatFull = res; while (offset < (res.full_chat as TLChannelFull).participants_count) { var pReq = new TLRequestGetParticipants() { channel = new TLInputChannel() { access_hash = main.access_hash.Value, channel_id = main.id }, filter = new TLChannelParticipantsRecent() { }, limit = 200, offset = offset }; var pRes = await client.SendRequestAsync <TLChannelParticipants>(pReq); result.Users.AddRange(pRes.users.lists.Cast <TLUser>()); offset += 200; await Task.Delay(500); } return(result); }
public static async Task <ChannelInfo> GetInfoGroup(String channelName, TLSharp.Core.TelegramClient client) { ChannelInfo result = new ChannelInfo(); TLChannel channelInfo; if (client == null) { return(null); } var dialogs_temp = await client.GetUserDialogsAsync(); TLDialogsSlice dialogs = dialogs_temp as TLDialogsSlice; TeleSharp.TL.Messages.TLChatFull res = new TeleSharp.TL.Messages.TLChatFull(); try { channelInfo = (await client.SendRequestAsync <TeleSharp.TL.Contacts.TLResolvedPeer>( new TeleSharp.TL.Contacts.TLRequestResolveUsername { Username = channelName }).ConfigureAwait(false)).Chats.Last() as TeleSharp.TL.TLChannel; TLRequestGetFullChannel req = new TLRequestGetFullChannel() { Channel = new TLInputChannel() { AccessHash = channelInfo.AccessHash.Value, ChannelId = channelInfo.Id } }; res = await client.SendRequestAsync <TeleSharp.TL.Messages.TLChatFull>(req); } catch { return(null); } Int32 offset = 0; result.Channel = channelInfo; result.ChatFull = res; while (offset < (res.FullChat as TLChannelFull).ParticipantsCount) { var pReq = new TLRequestGetParticipants() { Channel = new TLInputChannel() { AccessHash = channelInfo.AccessHash.Value, ChannelId = channelInfo.Id }, Filter = new TLChannelParticipantsRecent() { }, Limit = 200, Offset = offset }; var pRes = await client.SendRequestAsync <TLChannelParticipants>(pReq); //TLChatParticipantAdmin for (Int32 i = 0; i < pRes.Participants.Count; i++) { if (pRes.Participants[i] is TLChannelParticipantEditor || pRes.Participants[i] is TLChannelParticipantCreator || pRes.Participants[i] is TLChannelParticipantModerator) { result.Admins.Add(pRes.Users[i] as TLUser); } } result.Users.AddRange(pRes.Users.Cast <TLUser>()); offset += 200; await Task.Delay(500); } return(result); }
public async Task <List <TLMessage> > GatherChannelHistory(string channelName, int offset = 0, int maxId = -1, int limit = 50) { List <TLMessage> _resultMessages = new List <TLMessage>(); var client = new TLSharp.Core.TelegramClient(apiId, apiHash); await client.ConnectAsync(); var dialogs = (TLDialogs)await client.GetUserDialogsAsync(); var chat = dialogs.Chats.ToList() .OfType <TLChannel>() .FirstOrDefault(c => c.Title == channelName); if (chat.AccessHash != null) { TLChannel channel = new TLChannel() { Id = chat.Id, AccessHash = chat.AccessHash }; var request = new TLRequestGetFullChannel(); var fullChat = await client.SendRequestAsync <TLRequestGetFullChannel>(request); //var request = new TLRequestGetFullChat() { ChatId = chat.Id }; //var fullChat = await client.SendRequestAsync<TeleSharp.TL.Messages.TLChatFull>(request); //var request = new TLRequestGetMessages() { Id = chat. }; //var fullChat = await client.SendRequestAsync<TeleSharp.TL.Channels.TLRequestGetMessages>(request); //var request = new TLRequestGetAllChats() { }; //var fullChat = await client.SendRequestAsync<TeleSharp.TL.Messages.TLRequestGetAllChats>(request); var tlAbsMessages = await client.GetHistoryAsync( new TLInputPeerChannel { ChannelId = chat.Id, AccessHash = chat.AccessHash.Value }, offset, maxId, limit); var tlChannelMessages = (TLChannelMessages)tlAbsMessages; for (var index = 0; index < tlChannelMessages.Messages.Count - 1; index++) { var tlAbsMessage = tlChannelMessages.Messages.ToList()[index]; var message = (TLMessage)tlAbsMessage; //Now you have the message and you can do what you need with it //the code below is an example of messages classification if (message.Media == null) { _resultMessages.Add(new TLMessage() { Id = message.Id, FromId = chat.Id, Message = message.Message, Views = message.Views, }); } else { switch (message.Media.GetType().ToString()) { case "TeleSharp.TL.TLMessageMediaPhoto": var tLMessageMediaPhoto = (TLMessageMediaPhoto)message.Media; _resultMessages.Add(new TLMessage() { Id = message.Id, FromId = chat.Id, Message = message.Message, Views = message.Views, Media = message.Media, }); break; //case "TeleSharp.TL.TLMessageMediaDocument": // var tLMessageMediaDocument = (TLMessageMediaDocument)message.media; // _resultMessages.Add(new ChannelMessage() // { // Id = message.id, // ChannelId = chat.id, // Content = tLMessageMediaDocument.caption, // Type = EnChannelMessage.MediaDocument, // Views = message.views ?? 0, // }); // break; //case "TeleSharp.TL.TLMessageMediaWebPage": // var tLMessageMediaWebPage = (TLMessageMediaWebPage)message.media; // string url = string.Empty; // if (tLMessageMediaWebPage.webpage.GetType().ToString() != "TeleSharp.TL.TLWebPageEmpty") // { // var webPage = (TLWebPage)tLMessageMediaWebPage.webpage; // url = webPage.url; // } // _resultMessages.Add(new ChannelMessage // { // Id = message.id, // ChannelId = chat.id, // Content = message.message + @" : " + url, // Type = EnChannelMessage.WebPage, // Views = message.views ?? 0, // }); // break; } } } } return(_resultMessages); }
public static async Task <ModelParserInfo> ParserInfoAboutChannelAndSuperGroup(String channelName, TLSharp.Core.TelegramClient client, Int32 countMessageParse = 200) { ModelParserInfo info = new ModelParserInfo(); ChannelInfo result = new ChannelInfo(); List <Int32> AverageViews = new List <Int32>(); TLChannel channelInfo; if (client == null) { return(null); } var dialogs_temp = client.GetUserDialogsAsync().GetAwaiter().GetResult(); TLDialogsSlice dialogs = dialogs_temp as TLDialogsSlice; TeleSharp.TL.Messages.TLChatFull res = new TeleSharp.TL.Messages.TLChatFull(); channelInfo = (client.SendRequestAsync <TeleSharp.TL.Contacts.TLResolvedPeer>( new TeleSharp.TL.Contacts.TLRequestResolveUsername { Username = channelName }).ConfigureAwait(false)).GetAwaiter().GetResult().Chats.Last() as TeleSharp.TL.TLChannel; TLRequestGetFullChannel req = new TLRequestGetFullChannel() { Channel = new TLInputChannel() { AccessHash = channelInfo.AccessHash.Value, ChannelId = channelInfo.Id } }; res = client.SendRequestAsync <TeleSharp.TL.Messages.TLChatFull>(req).GetAwaiter().GetResult(); Int32 offset = 0; result.Channel = channelInfo; result.ChatFull = res; info.ChannelInfo = result; info.CountPeople = (res.FullChat as TLChannelFull).ParticipantsCount.Value; info.Avatar = (res.FullChat as TLChannelFull).ChatPhoto as TLPhoto; info.About = (res.FullChat as TLChannelFull).About; TLChannelMessages temp = new TLChannelMessages(); TLVector <TLAbsMessage> msgs = new TLVector <TLAbsMessage>(); do { try { temp = client.SendRequestAsync <TLChannelMessages> (new TLRequestGetHistory() { Peer = new TLInputPeerChannel() { ChannelId = result.Channel.Id, AccessHash = (long)result.Channel.AccessHash }, Limit = 500, AddOffset = offset, OffsetId = 0 }).GetAwaiter().GetResult(); msgs = temp.Messages; } catch { await Task.Delay(3000); } if (countMessageParse != 0) { offset = temp.Count - countMessageParse; countMessageParse = 0; } if (temp.Count > offset || temp.Count == 0) { offset += msgs.Count; foreach (var msg in msgs) { if (msg is TLMessage) { TLMessage sms = msg as TLMessage; if (sms.Views != null) { AverageViews.Add(sms.Views.Value); } info.CountMessage++; if (sms.Media != null) { info.CountMediaFiles++; if (sms.Media is TLMessageMediaDocument) { info.ChannelParserMediaInfo.CountVideo++; } else if (sms.Media is TLMessageMediaPhoto) { info.ChannelParserMediaInfo.CountPhoto++; } else if (sms.Media is TLMessageMediaWebPage) { info.ChannelParserMediaInfo.CountWebPag++; } else if (sms.Media is TLMessageMediaContact) { info.ChannelParserMediaInfo.CountContact++; } } } if (msg is TLMessageService) { continue; } } } else { break; } } while (temp.Count > offset || temp.Count == 0); if (AverageViews.Count != 0) { info.AverageViews = AverageViews.Sum() / AverageViews.Count; } return(info); }