#nullable enable using System; using System.Collections.Generic; using System.Threading.Tasks; using BotFramework; using BotFramework.Attributes; using BotFramework.Enums; using BotFramework.Utils; using Castle.Core.Internal; using Kruzya.TelegramBot.Core.Data; using Kruzya.TelegramBot.Core.Extensions; using Telegram.Bot; using Telegram.Bot.Types.Enums; namespace UserGroupTag { public class Handler : BotEventHandler { private readonly CoreContext _db; public Handler(CoreContext db) { _db = db; } [ParametrizedCommand(InChat.Public, "add_group", CommandParseMode.Both)] public async Task HandleAddGroup(string groupName) { Console.WriteLine("add_group"); // var groupName = group.Text; var repliedMessage = RawUpdate.Message!.ReplyToMessage; if (repliedMessage == null || repliedMessage.From!.IsBot || groupName.IsNullOrEmpty()) { return; } var from = repliedMessage.From; var fromId = from.Id; var chatId = Chat!.Id; var userGroupOption = await _db.UserValues.FindOrCreateOption(Chat.Id, "userGroups"); var tagDictionary = userGroupOption.GetValue(new Dictionary>()); var memberList = tagDictionary.GetValueOrDefault(groupName, new List()); if (memberList.Contains(fromId)) { await Bot.SendTextMessageAsync(chatId, $"{from.ToHtml()} уже находится в группе {groupName}", ParseMode.Html); return; } memberList.Add(repliedMessage.From.Id); tagDictionary[groupName] = memberList; userGroupOption.SetValue(tagDictionary); _db.MarkAsModified(userGroupOption); await Bot.SendTextMessageAsync(chatId, $"{from.ToHtml()} добавлен в группу {groupName}", ParseMode.Html); } [ParametrizedCommand(InChat.Public, "tag_group", CommandParseMode.Both)] public async Task HandleTagGroup(string groupName) { if (string.IsNullOrEmpty(groupName)) { return; } var userGroupOption = await _db.UserValues.FindOption(Chat.Id, "userGroups"); var userList = userGroupOption?.GetValue>>()?[groupName]; if (userList == null || userList.Count == 0) { return; } var msg = new HtmlString() .Text("Пользователь ") .UserMention(From) .Text(" охуел и хочет доебаться к: "); foreach (var userId in userList) { msg.User(userId, userId.ToString()).Text(", "); } await Bot.SendTextMessageAsync(Chat.Id, msg.ToString().TrimEnd(',', ' '), ParseMode.Html); } } }