TgBots/Program.cs
Dmitrii Prokudin e1d843db03
All checks were successful
Local Deploy with Docker / build-and-deploy (push) Successful in 19s
ConnectionString
2024-12-25 21:37:15 +03:00

95 lines
3.6 KiB
C#

using System;
using System.Data;
using System.Threading;
using System.Threading.Tasks;
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Dapper;
using Npgsql;
class Program
{
private static string botToken = "7814259349:AAEasTnDpX5s5PrQcR5ihI9pOsmp2Ocv-m0"; // Укажите токен вашего бота
private static string connectionString = "Host=127.0.0.1;Port=5432;Database=telegram_bot;Username=postgres;Password=postgres";
private static readonly TelegramBotClient botClient = new TelegramBotClient(botToken);
static async Task Main(string[] args)
{
Console.WriteLine("Bot is running...");
// Управление токеном завершения
var cts = new CancellationTokenSource();
Console.CancelKeyPress += (_, _) => cts.Cancel();
botClient.StartReceiving(UpdateHandler, ErrorHandler, cancellationToken: cts.Token);
Console.WriteLine("Press Ctrl+C to exit...");
await Task.Delay(Timeout.Infinite, cts.Token);
}
private static async Task UpdateHandler(ITelegramBotClient bot, Update update, CancellationToken cancellationToken)
{
Console.WriteLine("Received an message");
if (update.Type == UpdateType.Message && update.Message?.Text != null)
{
var message = update.Message;
if (message.Text.StartsWith("/help"))
{
await bot.SendTextMessageAsync(message.Chat.Id, "Уйди. Попробуйте /reg", cancellationToken: cancellationToken);
}
else if (message.Text.StartsWith("/reg"))
{
await RegisterUser(message, cancellationToken);
}
else
{
await bot.SendTextMessageAsync(message.Chat.Id, "Неизвестная команда. Попробуйте /reg", cancellationToken: cancellationToken);
}
}
}
private static async Task RegisterUser(Message message, CancellationToken cancellationToken)
{
try
{
using (IDbConnection db = new NpgsqlConnection(connectionString))
{
string query = "INSERT INTO users (chat_id, user_id, user_name) VALUES (@ChatId, @UserId, @UserName) ON CONFLICT (user_id) DO NOTHING";
var parameters = new
{
ChatId = message.Chat.Id,
UserId = message.From.Id,
UserName = message.From.FirstName
};
int rowsAffected = await db.ExecuteAsync(query, parameters);
if (rowsAffected > 0)
{
await botClient.SendTextMessageAsync(message.Chat.Id, "Вы успешно зарегистрированы!", cancellationToken: cancellationToken);
}
else
{
await botClient.SendTextMessageAsync(message.Chat.Id, "Вы уже зарегистрированы.", cancellationToken: cancellationToken);
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
await botClient.SendTextMessageAsync(message.Chat.Id, "Произошла ошибка при регистрации. Попробуйте позже.", cancellationToken: cancellationToken);
}
}
private static Task ErrorHandler(ITelegramBotClient bot, Exception exception, CancellationToken cancellationToken)
{
Console.WriteLine($"Error: {exception.Message}");
return Task.CompletedTask;
}
}