На просторах интернета можно найти множество описаний и примеров по созданию telegram bot-ов.Но Telegram Bot Api имеет ограниченный функционал. Для решения задачи по выгрузке сообщений из Telegram по ключевому слову необходимо использовать Telegram API. За основу была взята библиотека TLSharp. Стоит сразу прояснить, что дальнейшая работа возможна только для зарегистрированных пользователей в Telegram.
Стартом работы с API служит регистрация приложения:
Install-Package TLSharp
TelegramClient client = new TelegramClient(apiId, apiHash);
await client.ConnectAsync();
var hash = await client.SendCodeRequestAsync("номер телефона");
var code = "код телеграмма";
var user = await client.MakeAuthAsync("номер телефона", hash, code);
var dialogs = (TLDialogs)await client.GetUserDialogsAsync();
dialogs.Chats
foreach (var element in dialogs.Chats){
if (element is TLChat){
TLChat chat = element as TLChat;
TeleSharp.TL.Messages.TLChatFull channelInfo = await client.SendRequestAsync<TeleSharp.TL.Messages.TLChatFull>
(new TLRequestGetFullChat(){ChatId = chat.Id});
if (element is TLChannel){
var offset = 0;
TLChannel channel = element as TLChannel;
var chan = await client.SendRequestAsync<TeleSharp.TL.Messages.TLChatFull>(new TLRequestGetFullChannel() { Channel = new TLInputChannel()
{ ChannelId = channel.Id, AccessHash = (long)channel.AccessHash} });
TLInputPeerChannel inputPeer = new TLInputPeerChannel()
{ ChannelId = channel.Id, AccessHash = (long)channel.AccessHash };
while (true){
TLChannelMessages res = await client.SendRequestAsync<TLChannelMessages>
(new TLRequestGetHistory(){
Peer = inputPeer,
Limit = 400,
AddOffset = offset,
OffsetId = 0
});
var msgs = res.Messages;
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;
}
}
TLInputPeerChannel inputPeer = new TLInputPeerChannel()
{ ChannelId = channel.Id, AccessHash = (long)channel.AccessHash};
TLChannelMessages search = await client.SendRequestAsync<TLChannelMessages>
(new TeleSharp.TL.Messages.TLRequestSearch(){
Peer = inputPeer,
MaxDate = maxdate,
MinDate = mindate,
Q = searchWord,
Filter = new TLInputMessagesFilterEmpty(),
Limit = 100,
Offset = offset });
К сожалению, не доступен сервер mySQL