Телеграм бот удобное средство оповещения о штатных и нештатных режимах работы программы.
Минимум теории:
- telegram bot такой же собеседник как и любой ваш товарищ из списка друзей, но за ним нет реального человека.
- у telegram botа есть идентификатор, и зная его, Вы можете от его имени отправлять кому угодно сообщения.
- чтобы пользователь получил сообщение, надо знать id пользователя
- если пользователь получил сообщение, он может взять из него id отправителя и далее отправлять пользователю сообщения.
Приступаем к настройке и написанию программы:
1. Регистрируем telegramBot:
- Нам нужен главный бот, отец всех ботов, именно с помощью него создаются все боты. Добавляем его себе.
- далее в нем создает бота по следующему правилу, например mytest_bot в следующей последовательности:
/newbot
мой маленький и нежный бот вот такой
@MyLittleForOnlyMeBot
Что здесь есть - имя бота и его идентификатор
В ответ мы получаем информацию о созданном боте:
вот такой результат из которого нас интересует только token:
5340152478:AAFKdiyVRNqy35DljffEBEs7NRf5uNJzhK0
именно от его имени будем отправлять сообщения.
приступаем к программе:
главная форма. ПО нажатию кнопки будем отправлять сообщение из текстового поля нашему боту
Через NuGet добавляем вот этот компонент:
(проект -> управление пакетами nuget)
Добавляем обязательно:
using Telegram.Bot;
using System.ComponentModel;
Вот тело основной программы:
namespace telegram1
{
public partial class Form1 : Form
{
public static TelegramBotClient botClient;
public static BackgroundWorker bw;
public Form1()
{
InitializeComponent();
botClient = new TelegramBotClient("5340152478:AAFKdiyVRNqy35DljffEBEs7NRf5uNJzhK0") // вот и наш токен бота
{ Timeout = TimeSpan.FromSeconds(21) };
bw = new BackgroundWorker();
bw.DoWork += tg.bw_DoWork;
}
private void Button1_Click(object sender, EventArgs e)
{
tg.sendMsg(textBox1.Text);
}
}
}
Далее класс отлова и отправки сообщений:
using System;
using System.ComponentModel;
using Telegram.Bot;
namespace telegram1
{
class tg
{
public static long idchatMy = 0;
public static async void bw_DoWork(object sender, DoWorkEventArgs e)
{
try // обязательно перепроверяем ошибки
{
try
{
await Form1.botClient.SetWebhookAsync("");
}
catch (Exception ex)
{ Console.WriteLine("Соединение с интернетом не установлено"); }
int offset = 0;
try
{
while (true)
{
var updates = await Form1.botClient.GetUpdatesAsync(offset);
// получаем массив обновлений
foreach (var update in updates)
// Перебираем все обновления
{
var message = update.Message;
// ловим сообщение
if (message.Type == Telegram.Bot.Types.Enums.MessageType.Text)
{
if (message.Text == "/start")
// если получили /start
{
// в ответ на команду /saysomething выводим сообщение
Console.WriteLine(message.Chat.Id);
await Form1.botClient.SendTextMessageAsync(message.Chat.Id, "тест",
replyToMessageId: message.MessageId);
// на ID с которого получено сообщение отправлчяем сообщение "тест"
// но главное здесь то что мы получили ID а дальше можем его сохранить
// и когда угодно слать на него что угодно, все что нам надо чтобы слать на него сообщения
// это только ID (message.Chat.Id)
idchatMy = message.Chat.Id;
// вот мы его запомнили и сообщения будем слать ему
}
}
offset = update.Id + 1;
}
}
}
catch (Exception ex)
{ Console.WriteLine("Соединение с интернетом не установлено"); }
}
catch (Telegram.Bot.Exceptions.ApiRequestException ex)
{
Console.WriteLine(ex.Message); // если ключ не подошел - пишем об этом в консоль отладки
}
}
public static void sendMsg(String txt)
{
Form1.botClient.SendTextMessageAsync(chatId: idchatMy, text: txt);
if (Form1.bw.IsBusy != true) // если не запущен
{
Form1.bw.RunWorkerAsync(); // запускаем
}
}
}
}
Таким образом, если запустить эту программу, потом из вашего телеграмма отправить /start то мы не только получим слов "тест" но и запомним ID пользователя, который отправил сообщение. И потом все сообщения будем отправлять ему. Разумеется до закрытия программы или получения нового сообщения /start от другого пользователя.
Но если сохранить ID каждого пользователя, который отправляет /start, допустим в текстовый файл, а потом сделать отправку каждому пользователю по списку из файла, получится своего рода рассылка.
Пишите свои вопросы, подписывайтесь на мои статьи.
Надеюсь они будут Вам полезны