Добавить поддержку ChatId и улучшить управление заявками
Внесены изменения в класс `Program` в файле `Program.cs`: - Добавлено поле `ChatId` в SQL-запрос для извлечения идентификатора чата. - Введена переменная `ownerChatId` для хранения значения `ChatId`. - Обновлена логика формирования клавиатуры для администраторов и пользователей. - Добавлена проверка прав администратора в методе `UpdateReportStatus`. - Реализована логика возврата к списку в зависимости от роли пользователя, если заявка не найдена. - Добавлен метод `RemoveAdminFromDatabase` для удаления администратора из базы данных.
This commit is contained in:
parent
621f8c25c8
commit
e26002b16a
46
Program.cs
46
Program.cs
@ -1145,7 +1145,7 @@ class Program
|
|||||||
{
|
{
|
||||||
await connection.OpenAsync();
|
await connection.OpenAsync();
|
||||||
var command = connection.CreateCommand();
|
var command = connection.CreateCommand();
|
||||||
command.CommandText = "SELECT Priority, Room, Description, ReporterName, Status, DateCreated, AdminId FROM Reports WHERE Id = @id";
|
command.CommandText = "SELECT Priority, Room, Description, ReporterName, Status, DateCreated, AdminId, ChatId FROM Reports WHERE Id = @id";
|
||||||
command.Parameters.AddWithValue("@id", reportId);
|
command.Parameters.AddWithValue("@id", reportId);
|
||||||
|
|
||||||
using (var reader = await command.ExecuteReaderAsync())
|
using (var reader = await command.ExecuteReaderAsync())
|
||||||
@ -1158,6 +1158,7 @@ class Program
|
|||||||
string reporterName = reader.GetString(3);
|
string reporterName = reader.GetString(3);
|
||||||
string status = reader.GetString(4);
|
string status = reader.GetString(4);
|
||||||
string dateCreated = reader.GetDateTime(5).ToString("yyyy-MM-dd HH:mm:ss");
|
string dateCreated = reader.GetDateTime(5).ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
|
long ownerChatId = reader.GetInt64(7);
|
||||||
|
|
||||||
// Проверяем существование столбца AdminId
|
// Проверяем существование столбца AdminId
|
||||||
long adminId = 0;
|
long adminId = 0;
|
||||||
@ -1178,7 +1179,13 @@ class Program
|
|||||||
string priorityEmoji = GetPriorityEmoji(priority);
|
string priorityEmoji = GetPriorityEmoji(priority);
|
||||||
string statusEmoji = GetStatusEmoji(status);
|
string statusEmoji = GetStatusEmoji(status);
|
||||||
|
|
||||||
var statusButtons = new InlineKeyboardMarkup(new[]
|
InlineKeyboardMarkup keyboard;
|
||||||
|
|
||||||
|
// Разные клавиатуры для админов и обычных пользователей
|
||||||
|
if (admins.Contains(chatId))
|
||||||
|
{
|
||||||
|
// Клавиатура для администраторов с возможностью изменения статуса
|
||||||
|
keyboard = new InlineKeyboardMarkup(new[]
|
||||||
{
|
{
|
||||||
new[]
|
new[]
|
||||||
{
|
{
|
||||||
@ -1199,6 +1206,23 @@ class Program
|
|||||||
InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu")
|
InlineKeyboardButton.WithCallbackData("Главное меню", "main_menu")
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Клавиатура для обычных пользователей - только удаление своих заявок
|
||||||
|
keyboard = new InlineKeyboardMarkup(new[]
|
||||||
|
{
|
||||||
|
new[]
|
||||||
|
{
|
||||||
|
InlineKeyboardButton.WithCallbackData("❌ Удалить заявку", $"delete_{reportId}")
|
||||||
|
},
|
||||||
|
new[]
|
||||||
|
{
|
||||||
|
InlineKeyboardButton.WithCallbackData("🔙 Назад к списку", "user_reports"),
|
||||||
|
InlineKeyboardButton.WithCallbackData("🏠 Главное меню", "main_menu")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
string newText = $"Заявка #{reportId}\n\n" +
|
string newText = $"Заявка #{reportId}\n\n" +
|
||||||
$"Приоритет: {priorityEmoji} {priority}\n" +
|
$"Приоритет: {priorityEmoji} {priority}\n" +
|
||||||
@ -1212,7 +1236,7 @@ class Program
|
|||||||
await botClient.SendMessage(
|
await botClient.SendMessage(
|
||||||
chatId: chatId,
|
chatId: chatId,
|
||||||
text: newText,
|
text: newText,
|
||||||
replyMarkup: statusButtons
|
replyMarkup: keyboard
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1224,8 +1248,17 @@ class Program
|
|||||||
);
|
);
|
||||||
Log.Warning($"Заявка #{reportId} не найдена при попытке просмотра деталей.");
|
Log.Warning($"Заявка #{reportId} не найдена при попытке просмотра деталей.");
|
||||||
await Task.Delay(2000);
|
await Task.Delay(2000);
|
||||||
|
|
||||||
|
// Возвращаем к нужному списку в зависимости от роли пользователя
|
||||||
|
if (admins.Contains(chatId))
|
||||||
|
{
|
||||||
await ViewReports(botClient, chatId);
|
await ViewReports(botClient, chatId);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await ViewUserReports(botClient, chatId);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1242,6 +1275,7 @@ class Program
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Метод для удаления администратора из базы данных
|
// Метод для удаления администратора из базы данных
|
||||||
private static async Task RemoveAdminFromDatabase(long chatId)
|
private static async Task RemoveAdminFromDatabase(long chatId)
|
||||||
{
|
{
|
||||||
@ -1548,6 +1582,12 @@ class Program
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (!admins.Contains(changerId))
|
||||||
|
{
|
||||||
|
Log.Warning($"Попытка изменения статуса пользователем без прав администратора: {changerId}");
|
||||||
|
return; // Прерываем выполнение, если пользователь не администратор
|
||||||
|
}
|
||||||
|
|
||||||
string oldStatus = "";
|
string oldStatus = "";
|
||||||
long userChatId = 0;
|
long userChatId = 0;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user