Unloading messages using the Telegram API. Where to begin
On the Internet, you can find many descriptions and examples of creating telegram bot-s. But Telegram Bot Api has limited functionality. To solve the problem of unloading messages from Telegram by keyword, you need to use the Telegram API. The TLSharp library was taken as a basis . It is worth immediately clarifying that further work is possible only for registered users in Telegram.
The start of working with the API is application registration:
Add to the Visual Studio project through the package manager console:
To get started, create a client with the api_id and api_hash parameters obtained above - make a connection.
To authenticate your account, do the following:
After completing this step, TLSharp creates a session.dat file that stores all user session information. After that, you can execute any request presented in the documentation .
We proceed to unload messages from the channels, a prerequisite, you must first be subscribed to the channel. We get all the dialogs that the user has:
The recorded variable now stores all the dialogs, but in order to select only channels, the convenient structure allows you to select the dialogs of channels and chats using:
We go through all the chats and channels, separately checking whether the next element is a chat or a channel:
The TLSharp library implements all the functions of the official API . Functions are implemented through requests, for example, additional information on the channel can be obtained through a request of the form:
SendRequestAsync method is calledwith the type of the return value and as a parameter, any of the queries proposed in the library follows. The following is the code that receives full information about the channel, in this case, two parameters are needed to get the channel - ChannelId and AccessHash:
Unloading of messages occurs in portions of 100 messages and the AddOffset parameter sets the unloading of the next portion of messages.
Messages are of two types TLMessage and TLMessageService. The first is a regular text message, possibly containing some kind of media file. The second type of message in most cases is a call or message from the Telegram Service.
Add a preliminary search for messages in the channel. To do this, we simply use the same query, the structure of which is presented above.
To form your request, it remains only to fill in the parameters and then process the messages received in the same way.
That's all, I hope someone this article was useful.
The start of working with the API is application registration:
- We go to the Telegram website and enter your phone number. Enter the verification code.
- We get to the developer's page. To complete the registration, you must fill in the fields characterizing your future application.
- We get api_id and api_hash.
Work with the library
Add to the Visual Studio project through the package manager console:
Install-Package TLSharp
To get started, create a client with the api_id and api_hash parameters obtained above - make a connection.
TelegramClient client = new TelegramClient(apiId, apiHash);
await client.ConnectAsync();
To authenticate your account, do the following:
var hash = await client.SendCodeRequestAsync("номер телефона");
var code = "код телеграмма";
var user = await client.MakeAuthAsync("номер телефона", hash, code);
After completing this step, TLSharp creates a session.dat file that stores all user session information. After that, you can execute any request presented in the documentation .
We proceed to unload messages from the channels, a prerequisite, you must first be subscribed to the channel. We get all the dialogs that the user has:
var dialogs = (TLDialogs)await client.GetUserDialogsAsync();
The recorded variable now stores all the dialogs, but in order to select only channels, the convenient structure allows you to select the dialogs of channels and chats using:
dialogs.Chats
We go through all the chats and channels, separately checking whether the next element is a chat or a channel:
foreach (var element in dialogs.Chats){
if (element is TLChat){
TLChat chat = element as TLChat;
The TLSharp library implements all the functions of the official API . Functions are implemented through requests, for example, additional information on the channel can be obtained through a request of the form:
TeleSharp.TL.Messages.TLChatFull channelInfo = await client.SendRequestAsync
(new TLRequestGetFullChat(){ChatId = chat.Id});
SendRequestAsync method is called
if (element is TLChannel){
var offset = 0;
TLChannel channel = element as TLChannel;
var chan = await client.SendRequestAsync(new TLRequestGetFullChannel() { Channel = new TLInputChannel()
{ ChannelId = channel.Id, AccessHash = (long)channel.AccessHash} });
TLInputPeerChannel inputPeer = new TLInputPeerChannel()
{ ChannelId = channel.Id, AccessHash = (long)channel.AccessHash };
Message upload
Unloading of messages occurs in portions of 100 messages and the AddOffset parameter sets the unloading of the next portion of messages.
while (true){
TLChannelMessages res = await client.SendRequestAsync
(new TLRequestGetHistory(){
Peer = inputPeer,
Limit = 400,
AddOffset = offset,
OffsetId = 0
});
var msgs = res.Messages;
Messages are of two types TLMessage and TLMessageService. The first is a regular text message, possibly containing some kind of media file. The second type of message in most cases is a call or message from the Telegram Service.
if (res.Count > offset){
offset += msgs.Count;
foreach (var msg in msgs)
{
if (msg is TLMessage)
{
TLMessage sms = msg as TLMessage;
st.Add(sms.Message);
}
if (msg is TLMessageService)
continue;
}
}
else
break;
}
}
Search by posts
Add a preliminary search for messages in the channel. To do this, we simply use the same query, the structure of which is presented above.
TLInputPeerChannel inputPeer = new TLInputPeerChannel()
{ ChannelId = channel.Id, AccessHash = (long)channel.AccessHash};
TLChannelMessages search = await client.SendRequestAsync
(new TeleSharp.TL.Messages.TLRequestSearch(){
Peer = inputPeer,
MaxDate = maxdate,
MinDate = mindate,
Q = searchWord,
Filter = new TLInputMessagesFilterEmpty(),
Limit = 100,
Offset = offset });
To form your request, it remains only to fill in the parameters and then process the messages received in the same way.
That's all, I hope someone this article was useful.