-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
18 changed files
with
6,009 additions
and
5,890 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
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.Windows.Forms; | ||
using Telegram.Bot.Exceptions; | ||
using Telegram.Bot.Types; | ||
|
||
namespace FirehoseFinder | ||
{ | ||
class Bot_Funcs | ||
{ | ||
internal readonly long channel = -1001227261414; | ||
internal static ITelegramBotClient _botClient; | ||
// Это объект с настройками работы бота. Здесь мы будем указывать, какие типы Update мы будем получать, Timeout бота и так далее. | ||
private static ReceiverOptions _receiverOptions; | ||
internal static async Task BotWork() | ||
{ | ||
_botClient = new TelegramBotClient(Resources.bot); | ||
_receiverOptions = new ReceiverOptions | ||
{ | ||
AllowedUpdates = new[] // Тут указываем типы получаемых Update`ов, о них подробнее расказано тут https://core.telegram.org/bots/api#update | ||
{ | ||
UpdateType.Message, // Сообщения (текст, фото/видео, голосовые/видео сообщения и т.д.) | ||
UpdateType.CallbackQuery, //Inline кнопки | ||
}, | ||
// Параметр, отвечающий за обработку сообщений, пришедших за то время, когда ваш бот был оффлайн | ||
// True - не обрабатывать, False (стоит по умолчанию) - обрабаывать | ||
ThrowPendingUpdates = true, | ||
}; | ||
var cts = new CancellationTokenSource(); | ||
// UpdateHander - обработчик приходящих Update`ов | ||
// ErrorHandler - обработчик ошибок, связанных с Bot API | ||
_botClient.StartReceiving(UpdateHandler, ErrorHandler, _receiverOptions, cts.Token); // Запускаем бота | ||
|
||
var me = await _botClient.GetMeAsync(); // Создаем переменную, в которую помещаем информацию о нашем боте. | ||
MessageBox.Show($"{me.FirstName} подключён! Доступно управление авторизацией!"); | ||
await Task.Delay(-1); | ||
} | ||
private static async Task UpdateHandler(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken) | ||
{ | ||
// Обязательно ставим блок try-catch, чтобы наш бот не "падал" в случае каких-либо ошибок | ||
try | ||
{ | ||
// Сразу же ставим конструкцию switch, чтобы обрабатывать приходящие Update | ||
switch (update.Type) | ||
{ | ||
case UpdateType.Message: | ||
{ | ||
// эта переменная будет содержать в себе все связанное с сообщениями | ||
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 (Settings.Default.userID != 0) | ||
{ | ||
await botClient.SendTextMessageAsync( | ||
chat.Id, | ||
"Не надо больше. Вы уже авторизованы", | ||
replyToMessageId: message.MessageId //"ответ" на сообщение | ||
); | ||
} | ||
else | ||
{ | ||
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 | ||
{ | ||
await botClient.SendTextMessageAsync( | ||
chat.Id, | ||
"Авторизация прошла неудачно. Попробуйте ещё раз, используя приложение FhF.", | ||
replyToMessageId: message.MessageId //"ответ" на сообщение | ||
); | ||
} | ||
} | ||
} | ||
else | ||
{ | ||
await botClient.SendTextMessageAsync( | ||
chat.Id, | ||
message.Text, // отправляем то, что написал пользователь | ||
replyToMessageId: message.MessageId); | ||
} | ||
return; | ||
} | ||
} | ||
} | ||
catch (Exception ex) | ||
{ | ||
MessageBox.Show(ex.ToString()); | ||
} | ||
} | ||
|
||
private static Task ErrorHandler(ITelegramBotClient botClient, Exception error, CancellationToken cancellationToken) | ||
{ | ||
// Тут создадим переменную, в которую поместим код ошибки и её сообщение | ||
ApiRequestException apiRequestException = new ApiRequestException("Telegram API Error:", error); | ||
string ErrorMessage = $"Telegram API Error:\n[{apiRequestException.ErrorCode}]\n{apiRequestException.Message}"; | ||
MessageBox.Show(ErrorMessage); | ||
return Task.CompletedTask; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.