Добавлены функции для работы с отчетами пользователей
Добавлен метод `ViewUserReports` для извлечения и отображения отчетов пользователя. Обновлена логика удаления отчетов с проверкой принадлежности. Изменено отображение списка заявок после удаления. Добавлен метод `NotifyUserAboutStatusChange` для уведомления пользователей об изменениях статуса. Обновлен интерфейс главного меню с новыми кнопками и добавлен метод `SendAdminPanel` для панели администратора.
This commit is contained in:
parent
18ccd05b8f
commit
621f8c25c8
98
Program.cs
98
Program.cs
@ -193,6 +193,62 @@ class Program
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static async Task ViewUserReports(ITelegramBotClient botClient, long chatId)
|
||||||
|
{
|
||||||
|
string connectionString = "Data Source=bot.db";
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var connection = new SqliteConnection(connectionString))
|
||||||
|
{
|
||||||
|
await connection.OpenAsync();
|
||||||
|
var command = connection.CreateCommand();
|
||||||
|
command.CommandText = "SELECT Id, Description, Status, Priority FROM Reports WHERE ChatId = @chatId";
|
||||||
|
command.Parameters.AddWithValue("@chatId", chatId);
|
||||||
|
|
||||||
|
var buttons = new List<InlineKeyboardButton[]>();
|
||||||
|
|
||||||
|
using (var reader = await command.ExecuteReaderAsync())
|
||||||
|
{
|
||||||
|
while (await reader.ReadAsync())
|
||||||
|
{
|
||||||
|
long id = reader.GetInt64(0);
|
||||||
|
string description = reader.GetString(1).Substring(0, Math.Min(20, reader.GetString(1).Length));
|
||||||
|
string status = reader.GetString(2);
|
||||||
|
string priority = reader.GetString(3);
|
||||||
|
string statusEmoji = GetStatusEmoji(status);
|
||||||
|
string priorityMarker = priority.ToLower() == "высокий" ? "⚠️ " : "";
|
||||||
|
|
||||||
|
buttons.Add(new[]
|
||||||
|
{
|
||||||
|
InlineKeyboardButton.WithCallbackData(
|
||||||
|
$"{priorityMarker}#{id} - {statusEmoji} {status} - {description}...",
|
||||||
|
$"user_report_{id}")
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Добавляем кнопки навигации
|
||||||
|
buttons.Add(new[]
|
||||||
|
{
|
||||||
|
InlineKeyboardButton.WithCallbackData("🏠 Главное меню", "main_menu")
|
||||||
|
});
|
||||||
|
|
||||||
|
await botClient.SendMessage(
|
||||||
|
chatId: chatId,
|
||||||
|
text: "Ваши заявки:",
|
||||||
|
replyMarkup: new InlineKeyboardMarkup(buttons)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.Error($"Ошибка: {ex.Message}");
|
||||||
|
await botClient.SendMessage(chatId, "Ошибка при получении ваших заявок");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static async Task ShowUserSettings(ITelegramBotClient botClient, long chatId)
|
private static async Task ShowUserSettings(ITelegramBotClient botClient, long chatId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -387,6 +443,20 @@ class Program
|
|||||||
await ToggleAdminNotifications(adminId, false);
|
await ToggleAdminNotifications(adminId, false);
|
||||||
await ShowAdminSettings(botClient, chatId);
|
await ShowAdminSettings(botClient, chatId);
|
||||||
}
|
}
|
||||||
|
else if (data == "user_reports")
|
||||||
|
{
|
||||||
|
await ViewUserReports(botClient, chatId);
|
||||||
|
}
|
||||||
|
else if (data != null && data.StartsWith("user_report_"))
|
||||||
|
{
|
||||||
|
long reportId = long.Parse(data.Substring("user_report_".Length));
|
||||||
|
await ShowReportDetails(botClient, chatId, reportId, callbackQuery.Message.MessageId);
|
||||||
|
}
|
||||||
|
else if (data != null && data.StartsWith("delete_"))
|
||||||
|
{
|
||||||
|
long reportId = long.Parse(data.Substring(7));
|
||||||
|
await DeleteReport(botClient, chatId, reportId);
|
||||||
|
}
|
||||||
// Также добавим обработку команды /removeadmin в секцию обработки текстовых сообщений:
|
// Также добавим обработку команды /removeadmin в секцию обработки текстовых сообщений:
|
||||||
|
|
||||||
// В блоке для обработки текстовых сообщений (после if (message.Text.StartsWith("/admin")))
|
// В блоке для обработки текстовых сообщений (после if (message.Text.StartsWith("/admin")))
|
||||||
@ -726,8 +796,24 @@ class Program
|
|||||||
{
|
{
|
||||||
await connection.OpenAsync();
|
await connection.OpenAsync();
|
||||||
var command = connection.CreateCommand();
|
var command = connection.CreateCommand();
|
||||||
command.CommandText = "DELETE FROM Reports WHERE Id = @id";
|
command.CommandText = "SELECT ChatId FROM Reports WHERE Id = @id";
|
||||||
command.Parameters.AddWithValue("@id", reportId);
|
command.Parameters.AddWithValue("@id", reportId);
|
||||||
|
|
||||||
|
var ownerChatId = (long?)await command.ExecuteScalarAsync();
|
||||||
|
|
||||||
|
if (ownerChatId == null)
|
||||||
|
{
|
||||||
|
await botClient.SendMessage(chatId, $"Заявка #{reportId} не найдена.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ownerChatId != chatId && !admins.Contains(chatId))
|
||||||
|
{
|
||||||
|
await botClient.SendMessage(chatId, "⛔ Вы не можете удалить эту заявку, так как она не принадлежит вам.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
command.CommandText = "DELETE FROM Reports WHERE Id = @id";
|
||||||
await command.ExecuteNonQueryAsync();
|
await command.ExecuteNonQueryAsync();
|
||||||
|
|
||||||
var deletionMessage = await botClient.SendMessage(chatId, $"Заявка #{reportId} успешно удалена.");
|
var deletionMessage = await botClient.SendMessage(chatId, $"Заявка #{reportId} успешно удалена.");
|
||||||
@ -739,8 +825,8 @@ class Program
|
|||||||
// Удаляем сообщение об удалении
|
// Удаляем сообщение об удалении
|
||||||
await botClient.DeleteMessage(chatId, deletionMessage.MessageId);
|
await botClient.DeleteMessage(chatId, deletionMessage.MessageId);
|
||||||
|
|
||||||
// Отображаем список заявок
|
// Отображаем список заявок пользователя
|
||||||
await ViewReports(botClient, chatId);
|
await ViewUserReports(botClient, chatId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -751,6 +837,7 @@ class Program
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static async Task NotifyUserAboutStatusChange(long chatId, long reportId, string newStatus)
|
private static async Task NotifyUserAboutStatusChange(long chatId, long reportId, string newStatus)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -879,6 +966,10 @@ class Program
|
|||||||
InlineKeyboardButton.WithCallbackData("⚙️ Настройки", "user_settings")
|
InlineKeyboardButton.WithCallbackData("⚙️ Настройки", "user_settings")
|
||||||
},
|
},
|
||||||
new[]
|
new[]
|
||||||
|
{
|
||||||
|
InlineKeyboardButton.WithCallbackData("📋 Мои заявки", "user_reports")
|
||||||
|
},
|
||||||
|
new[]
|
||||||
{
|
{
|
||||||
InlineKeyboardButton.WithCallbackData("🔐 Панель администратора", "admin_panel")
|
InlineKeyboardButton.WithCallbackData("🔐 Панель администратора", "admin_panel")
|
||||||
}
|
}
|
||||||
@ -891,6 +982,7 @@ class Program
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static async Task SendAdminPanel(ITelegramBotClient botClient, long chatId)
|
private static async Task SendAdminPanel(ITelegramBotClient botClient, long chatId)
|
||||||
{
|
{
|
||||||
var keyboard = new InlineKeyboardMarkup(new[]
|
var keyboard = new InlineKeyboardMarkup(new[]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user