Skip to content

Commit

Permalink
Поправил логику бота
Browse files Browse the repository at this point in the history
  • Loading branch information
hoplik committed Jun 20, 2024
1 parent f6be8c7 commit bb168f8
Show file tree
Hide file tree
Showing 2 changed files with 126 additions and 44 deletions.
154 changes: 116 additions & 38 deletions Bot_Funcs.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
using System;
using FirehoseFinder.Properties;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Telegram.Bot.Polling;
using Telegram.Bot;
using FirehoseFinder.Properties;
using System.Threading;
using Telegram.Bot.Types.Enums;
using System.Threading.Tasks;
using System.Windows.Forms;
using Telegram.Bot;
using Telegram.Bot.Exceptions;
using Telegram.Bot.Polling;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Telegram.Bot.Types.ReplyMarkups;

namespace FirehoseFinder
{
Expand Down Expand Up @@ -40,7 +39,8 @@ internal static async Task BotWork()
_botClient.StartReceiving(UpdateHandler, ErrorHandler, _receiverOptions, cts.Token); // Запускаем бота

var me = await _botClient.GetMeAsync(); // Создаем переменную, в которую помещаем информацию о нашем боте.
MessageBox.Show($"{me.FirstName} подключён! Доступно управление авторизацией!");
MessageBox.Show("Если у вас не получилость автоматически авторизоваться, то вы можете найти в Телеграм бота \"Hoplik-Bot\"" +
" и при запущенном приложении FhF попробовать ввести после команды /start код авторизации:" + Environment.NewLine + Settings.Default.auth_code.ToString(), me.FirstName + " успешно подключён!");
await Task.Delay(-1);
}
private static async Task UpdateHandler(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
Expand All @@ -55,54 +55,132 @@ private static async Task UpdateHandler(ITelegramBotClient botClient, Update upd
{
// эта переменная будет содержать в себе все связанное с сообщениями
var message = update.Message;

// From - это от кого пришло сообщение (или любой другой Update)
var user = message.From;

// Chat - содержит всю информацию о чате
var chat = message.Chat;
if (message.Text.StartsWith("/start") && message.Text.Length > 7)
// Обрабатываем команду /старт
if (message.Text.StartsWith("/start"))
{
if (Settings.Default.userID != 0)
{
await botClient.SendTextMessageAsync(
chat.Id,
"Не надо больше. Вы уже авторизованы",
replyToMessageId: message.MessageId //"ответ" на сообщение
);
}
else
if (message.Text.Length > 6) //Обрабатываем код авторизации (не забываем про дубликаты!)
{
string authcode = message.Text.Remove(0, 7);
bool authok = authcode.Equals(Settings.Default.auth_code);
if (authok)
{
Settings.Default.userID = user.Id;
if (string.IsNullOrEmpty(user.FirstName)) Settings.Default.userFN = string.Empty; else Settings.Default.userFN = user.FirstName;
if (string.IsNullOrEmpty(user.LastName)) Settings.Default.userSN = string.Empty; else Settings.Default.userSN = user.LastName;
if (string.IsNullOrEmpty(user.Username)) Settings.Default.userN = string.Empty; else Settings.Default.userN = user.Username;
//Авторизация прошла удачно. Перегружаемся.
Application.Restart();
}
else
if (Settings.Default.userID != 0)
{
await botClient.SendTextMessageAsync(
chat.Id,
"Авторизация прошла неудачно. Попробуйте ещё раз, используя приложение FhF.",
"Не надо больше. Вы уже авторизованы",
replyToMessageId: message.MessageId //"ответ" на сообщение
);
}
else
{
string authcode = message.Text.Substring(6).Trim(' ');
bool authok = authcode.Equals(Settings.Default.auth_code);
if (authok)
{
Settings.Default.userID = user.Id;
if (string.IsNullOrEmpty(user.FirstName)) Settings.Default.userFN = string.Empty; else Settings.Default.userFN = user.FirstName;
if (string.IsNullOrEmpty(user.LastName)) Settings.Default.userSN = string.Empty; else Settings.Default.userSN = user.LastName;
if (string.IsNullOrEmpty(user.Username)) Settings.Default.userN = string.Empty; else Settings.Default.userN = user.Username;
//Авторизация прошла удачно. Перегружаемся.
Application.Restart();
}
else
{
await botClient.SendTextMessageAsync(
chat.Id,
"Авторизация прошла неудачно. Попробуйте ещё раз, используя приложение FhF.",
replyToMessageId: message.MessageId //"ответ" на сообщение
);
}
}
}
else //Команда без параметров. Поднимаем клавиатуру, просим ввести код авторизации и пр.
{
// Тут создаем нашу клавиатуру
var inlineKeyboard = new InlineKeyboardMarkup(
new List<InlineKeyboardButton[]>() // здесь создаем лист (массив), который содрежит в себе массив из класса кнопок
{
// Каждый новый массив - это дополнительные строки,
// а каждая дополнительная кнопка в массиве - это добавление ряда
new InlineKeyboardButton[] // тут создаем массив кнопок
{
InlineKeyboardButton.WithCallbackData("Авторизация", "button_auth"),
InlineKeyboardButton.WithCallbackData("Рейтинг", "button_rate"),
},
});
await botClient.SendTextMessageAsync(
chat.Id,
"Пожалуйста, выберите \"Авторизация\", если готовы ввести код из программы FhF или \"Рейтинг\", если хотите посмотреть текущий \"Рейтинг неравнодушных пользователей\"",
replyMarkup: inlineKeyboard); // Все клавиатуры передаются в параметр replyMarkup
return;
}
}
else
{
await botClient.SendTextMessageAsync(
chat.Id,
message.Text, // отправляем то, что написал пользователь
replyToMessageId: message.MessageId);
//Код авторизации верен
if (message.Text.Equals(Settings.Default.auth_code))
{
Settings.Default.userID = user.Id;
if (string.IsNullOrEmpty(user.FirstName)) Settings.Default.userFN = string.Empty; else Settings.Default.userFN = user.FirstName;
if (string.IsNullOrEmpty(user.LastName)) Settings.Default.userSN = string.Empty; else Settings.Default.userSN = user.LastName;
if (string.IsNullOrEmpty(user.Username)) Settings.Default.userN = string.Empty; else Settings.Default.userN = user.Username;
//Авторизация прошла удачно. Перегружаемся.
Application.Restart();
}
else //Ввели неподдерживаемую команду
{
await botClient.SendTextMessageAsync(
chat.Id,
"Извините, не понимаю о чём вы. Может быть /start?",
replyToMessageId: message.MessageId //"ответ" на сообщение
);
}
}
return;
}
case UpdateType.CallbackQuery:
{
// Переменная, которая будет содержать в себе всю информацию о кнопке, которую нажали
var callbackQuery = update.CallbackQuery;
// Аналогично и с Message мы можем получить информацию о чате, о пользователе и т.д.
var user = callbackQuery.From;
// Вот тут нужно уже быть немножко внимательным и не путаться!
// Мы пишем не callbackQuery.Chat , а callbackQuery.Message.Chat , так как
// кнопка привязана к сообщению, то мы берем информацию от сообщения.
var chat = callbackQuery.Message.Chat;
// Добавляем блок switch для проверки кнопок
switch (callbackQuery.Data)
{
// Data - это придуманный нами id кнопки, мы его указывали в параметре
// callbackData при создании кнопок. У меня это button1, button2 и button3
case "button_auth":
{
// В этом типе клавиатуры обязательно нужно использовать следующий метод
await botClient.AnswerCallbackQueryAsync(callbackQuery.Id, "При успешной авторизации ваш экземпляр приложения FhF перезагрузится автоматически!");
// Для того, чтобы отправить телеграмму запрос, что мы нажали на кнопку

await botClient.SendTextMessageAsync(
chat.Id,
"Отправьте 4 цифры кода авторизации из приложения FhF в формате ХХ-ХХ");
return;
}
case "button_rate":
{
// А здесь мы добавляем наш сообственный текст, который заменит слово "загрузка", когда мы нажмем на кнопку
await botClient.AnswerCallbackQueryAsync(callbackQuery.Id, "Готовлю рейтинг...");

await botClient.SendTextMessageAsync(
chat.Id,
$"Пока не научился :(");
return;
}
default:
return;
}
}
default:
return;
}
}
catch (Exception ex)
Expand Down
16 changes: 10 additions & 6 deletions Forms/Form1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,6 @@ protected override void WndProc(ref System.Windows.Forms.Message m)
/// <param name="e"></param>
private void Formfhf_Load(object sender, EventArgs e)
{
//Запускаем локального бота
Bot_Funcs.BotWork();
//Загружаем Справочник устройств
dataSet1.ReadXml("ForFilter.xml", XmlReadMode.ReadSchema);
bindingSource_collection.DataSource = dataSet1.Tables[1];
Expand Down Expand Up @@ -2571,8 +2569,9 @@ public async void BotSendMes(string send_message, string version)
try
{
string mess_to_post = CorrectBotString(send_message) + Environment.NewLine +
$"[{version}](https://github.com/hoplik/Firehose-Finder/releases/tag/{version})";
if (Settings.Default.userID != 0) mess_to_post += Environment.NewLine + $"Спасибо пользователю [{Settings.Default.userFN} {Settings.Default.userSN} ({Settings.Default.userN})](tg://user?id={Settings.Default.userID}) за предоставленные данные.";
$"[FhF Version: {version}](https://github.com/hoplik/Firehose-Finder/releases/tag/{version})";
if (Settings.Default.userID != 0) mess_to_post += Environment.NewLine + $"Спасибо пользователю [{Settings.Default.userFN} {Settings.Default.userSN} ({Settings.Default.userN})](tg://user?id={Settings.Default.userID}) за предоставленные данные. " +
"Ваша реакция на это сообщение увеличит #Concerned_users_rating";
await Bot_Funcs._botClient.SendTextMessageAsync(
botFuncs.channel,
mess_to_post,
Expand Down Expand Up @@ -3307,8 +3306,9 @@ private async void ОтправкаПрограммераToolStripMenuItem_Click
{
string version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
string mess_to_post = CorrectBotString(inputstr.ToString()) + Environment.NewLine +
$"[{version}](https://github.com/hoplik/Firehose-Finder/releases/tag/{version})";
if (Settings.Default.userID != 0) mess_to_post += Environment.NewLine + $"Спасибо пользователю [{Settings.Default.userFN} {Settings.Default.userSN} ({Settings.Default.userN})](tg://user?id={Settings.Default.userID}) за предоставленные данные.";
$"[FhF Version: {version}](https://github.com/hoplik/Firehose-Finder/releases/tag/{version})";
if (Settings.Default.userID != 0) mess_to_post += Environment.NewLine + $"Спасибо пользователю [{Settings.Default.userFN} {Settings.Default.userSN} ({Settings.Default.userN})](tg://user?id={Settings.Default.userID}) за предоставленные данные. " +
"Ваша реакция на это сообщение увеличит #Concerned_users_rating";
await Bot_Funcs._botClient.SendDocumentAsync(botFuncs.channel, onlineFile, null, null, mess_to_post, Telegram.Bot.Types.Enums.ParseMode.Markdown);
textBox_soft_term.AppendText(LocRes.GetString("sent") + Environment.NewLine);
}
Expand Down Expand Up @@ -3499,6 +3499,10 @@ private void ЗагрузитьССервераToolStripMenuItem_Click(object se

private void АвторизоватьсяЧерезТелеграмToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("Пожалуйста, дождитесь сообщения об успешном запуске бота!");
//Запускаем локального бота
Bot_Funcs.BotWork();
Thread.Sleep(5000);
var rand = new Random();
Settings.Default.auth_code = rand.Next(10, 99).ToString() + '\u002D' + rand.Next(10, 99).ToString();
ProcessStartInfo psi = new ProcessStartInfo("https://t.me/Hoplik_Bot?start=" + Settings.Default.auth_code);
Expand Down

0 comments on commit bb168f8

Please sign in to comment.