Разработка бота тг на с#
Цитата: Константин от 05.11.2022, 23:59Всем привет. Решил попробовать себя в разработке ботов и столкнулся с такой проблемой: не могу отправить сообщение ботом по айди в тг.
await botClient.SendTextMessageAsync(moderator, "Привет");
В переменную moderator записан айди, напрямую написать вместо переменной айди не помогает. Пользователь, которому принадлежит айди, уже имеет диалог с ботом.
Всем привет. Решил попробовать себя в разработке ботов и столкнулся с такой проблемой: не могу отправить сообщение ботом по айди в тг.
await botClient.SendTextMessageAsync(moderator, "Привет");
В переменную moderator записан айди, напрямую написать вместо переменной айди не помогает. Пользователь, которому принадлежит айди, уже имеет диалог с ботом.
Цитата: Adler от 06.11.2022, 09:14Приветствую.
Так что именно не получается? Ошибка какая-то или что?
Приветствую.
Так что именно не получается? Ошибка какая-то или что?
Цитата: XpucT от 06.11.2022, 09:29Константин, привет 🖐
Не уверен, что правильно понял, но на всякий случай скажу, чтобы Ты отказался от создания переменных, когда работаешь с ботом.
Нужно понимать, что бот постоянно прослушивает сервер и взаимодействует с другими людьми.Идеальным конкретно в данном случае будет не обращаться к переменным и упаси к полям.
В идеале обращаться строго update.message.ChatId...
Константин, привет 🖐
Не уверен, что правильно понял, но на всякий случай скажу, чтобы Ты отказался от создания переменных, когда работаешь с ботом.
Нужно понимать, что бот постоянно прослушивает сервер и взаимодействует с другими людьми.
Идеальным конкретно в данном случае будет не обращаться к переменным и упаси к полям.
В идеале обращаться строго update.message.ChatId...
Цитата: Константин от 06.11.2022, 12:42Цитата: Adler от 06.11.2022, 09:14Приветствую.
Так что именно не получается? Ошибка какая-то или что?Выполнение кода просто зависает на строке кода отправления сообщения
Мне нужно, чтобы бот отправил мне сообщение пользователя, почему-то не хочет отправлять по айди в тг, не могу понять почему
Цитата: Adler от 06.11.2022, 09:14Приветствую.
Так что именно не получается? Ошибка какая-то или что?
Выполнение кода просто зависает на строке кода отправления сообщения
Мне нужно, чтобы бот отправил мне сообщение пользователя, почему-то не хочет отправлять по айди в тг, не могу понять почему
Цитата: Alex от 28.11.2022, 16:14Попробуйте сначала просто, через http запрос отправить себе сообщение или через PowerShell
[spoiler title="PowerShell"]$token = "" $chat_id = "" $text = "" #----------------------------------------------------------------------------------------------------------------------------------------------------------- $URI = "https://api.telegram.org/bot" + $token + "/sendMessage?chat_id=" + $chat_id + "&text=" + "`n" [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 Invoke-WebRequest -URI ($URI) –UseBasicParsing[/spoiler]
Есть подозрение, что id чата не правильный.
А вообще я делал так:
[spoiler title="Часть кода с отправкой сообщения"]private async static Task OnUpdate(ITelegramBotClient botClient, Update update, CancellationToken ct) { string chatId; string userId; try // Если пользователь отвечает кнопками под сообщением то метод получения чата другой(Можно от этого избавиться переписав соответствующие методы и так будет правильнее) { chatId = update.Message.Chat.Id.ToString(); userId = update.Message.From.Id.ToString(); } catch { chatId = update.CallbackQuery.Message.Chat.Id.ToString(); userId = update.CallbackQuery.Message.From.Id.ToString(); } if (update.Type == Telegram.Bot.Types.Enums.UpdateType.Message)//Если прислали сообщение { var message = update.Message; if (message.Type == Telegram.Bot.Types.Enums.MessageType.Text)//Если сообщение является текстом { if (update.Message.Text == "/start")//Простая проверка на комманды { await botClient.SendTextMessageAsync(chatId, $"Рад приветствовать вас {update.Message.From.Username}.\n" + $"Я принимаю фото ШК и ищу информацию по товару.\n" + $"P.S: Старйтесь фотограффировать ШК либо вертикально либо горизонтально. Так мне распознать его будет легче."); Console.WriteLine($"{DateTime.Today} ---Получена комманда '{update.Message.Text}' в чате с ID: {chatId} от {update.Message.From.Username}."); } } }[/spoiler]
Попробуйте сначала просто, через http запрос отправить себе сообщение или через PowerShell
$token = "" $chat_id = "" $text = "" #----------------------------------------------------------------------------------------------------------------------------------------------------------- $URI = "https://api.telegram.org/bot" + $token + "/sendMessage?chat_id=" + $chat_id + "&text=" + "`n" [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 Invoke-WebRequest -URI ($URI) –UseBasicParsing
Есть подозрение, что id чата не правильный.
А вообще я делал так:
private async static Task OnUpdate(ITelegramBotClient botClient, Update update, CancellationToken ct)
{
string chatId;
string userId;
try // Если пользователь отвечает кнопками под сообщением то метод получения чата другой(Можно от этого избавиться переписав соответствующие методы и так будет правильнее)
{
chatId = update.Message.Chat.Id.ToString();
userId = update.Message.From.Id.ToString();
}
catch
{
chatId = update.CallbackQuery.Message.Chat.Id.ToString();
userId = update.CallbackQuery.Message.From.Id.ToString();
}
if (update.Type == Telegram.Bot.Types.Enums.UpdateType.Message)//Если прислали сообщение
{
var message = update.Message;
if (message.Type == Telegram.Bot.Types.Enums.MessageType.Text)//Если сообщение является текстом
{
if (update.Message.Text == "/start")//Простая проверка на комманды
{
await botClient.SendTextMessageAsync(chatId, $"Рад приветствовать вас {update.Message.From.Username}.\n" +
$"Я принимаю фото ШК и ищу информацию по товару.\n" +
$"P.S: Старйтесь фотограффировать ШК либо вертикально либо горизонтально. Так мне распознать его будет легче.");
Console.WriteLine($"{DateTime.Today} ---Получена комманда '{update.Message.Text}' в чате с ID: {chatId} от {update.Message.From.Username}.");
}
}
}