public async Task <int> ImportFile( string fileName, GlobalBanItem globalBan ) { var reader = fileName.ReadCsv <CommonGlobalBanItem>(); var gbanMaps = reader.Select ( item => new GlobalBanItem() { UserId = item.UserId, BannedBy = globalBan.BannedBy, BannedFrom = globalBan.BannedFrom, ReasonBan = globalBan.ReasonBan, CreatedAt = DateTime.Now } ).ToList(); var deleteRows = await _queryService .CreateMySqlFactory() .FromTable(GBanTable) .WhereIn("user_id", gbanMaps.Select(x => x.UserId)) .DeleteAsync(); var insertRows = await _queryService .CreateMySqlFactory() .FromTable(GBanTable) .InsertAsync ( columns: new[] { "user_id", "from_id", "chat_id", "reason", "created_at" }, valuesCollection: gbanMaps.Select ( item => new object[] { item.UserId, item.BannedBy, item.BannedFrom, item.ReasonBan, item.CreatedAt } ) ); var diff = insertRows - deleteRows; return(diff); }
/// <summary> /// Saves the ban async. /// </summary> /// <param name="globalBanItem">The global ban data.</param> /// <returns>A Task.</returns> public async Task <bool> SaveBanAsync(GlobalBanItem globalBanItem) { var userId = globalBanItem.UserId; var fromId = globalBanItem.BannedBy; var chatId = globalBanItem.BannedFrom; var reason = globalBanItem.ReasonBan; var data = new Dictionary <string, object>() { { "user_id", userId }, { "from_id", fromId }, { "chat_id", chatId }, { "reason", reason } }; Log.Information("Inserting new GBan: {@V}", globalBanItem); var query = await _queryService .CreateMySqlFactory() .FromTable(GBanTable) .InsertAsync(data); return(query > 0); }
public static async Task AddGlobalBanUserAsync(this TelegramService telegramService) { long userId; string reason; var message = telegramService.Message; var chatId = telegramService.ChatId; var fromId = telegramService.FromId; var partedText = telegramService.MessageTextParts; var param0 = partedText.ElementAtOrDefault(0) ?? ""; var param1 = partedText.ElementAtOrDefault(1) ?? ""; await telegramService.DeleteSenderMessageAsync(); if (!telegramService.IsFromSudo) { return; } if (telegramService.ReplyToMessage != null) { var replyToMessage = telegramService.ReplyToMessage; userId = replyToMessage.From.Id; reason = message.Text; if (replyToMessage.ForwardFrom != null) { userId = replyToMessage.ForwardFrom.Id; } if (reason.IsNotNullOrEmpty()) { reason = partedText.Skip(1).JoinStr(" ").Trim(); } } else { if (param1.IsNullOrEmpty()) { await telegramService.SendTextMessageAsync( sendText : "Balas seseorang yang mau di ban", scheduleDeleteAt : DateTime.UtcNow.AddMinutes(1), includeSenderMessage : true ); return; } userId = param1.ToInt64(); reason = message.Text; if (reason.IsNotNullOrEmpty()) { reason = partedText.Skip(2).JoinStr(" ").Trim(); } } Log.Information("Execute Global Ban"); await telegramService.AppendTextAsync($"<b>Global Ban</b>", replyToMsgId : 0); await telegramService.AppendTextAsync($"Telegram UserId: <code>{userId}</code>"); if (await telegramService.CheckFromAdmin(userId)) { await telegramService.AppendTextAsync($"Tidak dapat melakukan Global Ban kepada Admin"); return; } reason = reason.IsNullOrEmpty() ? "General SpamBot" : reason; var banData = new GlobalBanItem() { UserId = userId, BannedBy = fromId, BannedFrom = chatId, ReasonBan = reason }; var globalBanService = telegramService.GetRequiredService <GlobalBanService>(); var eventLogService = telegramService.GetRequiredService <EventLogService>(); var isGlobalBanned = await globalBanService.IsExist(userId); if (isGlobalBanned) { await telegramService.AppendTextAsync( sendText : "Pengguna sudah di ban", scheduleDeleteAt : DateTime.UtcNow.AddMinutes(2), includeSenderMessage : true ); return; } if (telegramService.ReplyToMessage?.ForwardFrom == null) { var messageId = telegramService.ReplyToMessage?.MessageId ?? -1; if (telegramService.ReplyToMessage == null) { messageId = -1; } else { await telegramService.KickMemberAsync(userId, untilDate : DateTime.Now.AddSeconds(30));// Kick and Unban after 8 hours } var messageLog = HtmlMessage.Empty .TextBr("Global Ban di tambahkan baru") .Bold("UserId: ").CodeBr(userId.ToString()); await Task.WhenAll( eventLogService.SendEventLogAsync( chatId: chatId, message: message, text: messageLog.ToString(), forwardMessageId: messageId, deleteForwardedMessage: true, messageFlag: MessageFlag.GBan ) ); } var save = await globalBanService.SaveBanAsync(banData); await telegramService.AppendTextAsync($"Alasan: {reason}"); Log.Information("SaveBan: {Save}", save); await globalBanService.UpdateCache(userId); await telegramService.AppendTextAsync( sendText : "Pengguna berhasil di tambahkan", scheduleDeleteAt : DateTime.UtcNow.AddMinutes(2), includeSenderMessage : true ); }