using System; using System.Linq; using System.Threading.Tasks; using BotFramework; using BotFramework.Attributes; using Kruzya.TelegramBot.Core.Data; using Microsoft.EntityFrameworkCore; using Telegram.Bot.Types; namespace Kruzya.TelegramBot.Core { public class GeneralHandler : BotEventHandler { [AttributeUsage(AttributeTargets.Method)] public sealed class HandleEverythingAttribute : HandlerAttribute { protected override bool CanHandle(HandlerParams param) { return true; } } protected readonly CoreContext databaseContext; public GeneralHandler(CoreContext dbCtx) { databaseContext = dbCtx; } [HandleEverything] public async Task Listener() { foreach (var message in new Message[] {RawUpdate.Message, RawUpdate.EditedMessage, RawUpdate.ChannelPost, RawUpdate.EditedChannelPost}) { if (message == null) { continue; } await VerifyChatPair(message); } } public async Task VerifyChatPair(Message message) { await VerifyChatPair(message.Chat, message.From); } public async Task VerifyChatPair(Chat chat, User user) { await VerifyChatPair(chat.Id, user.Id); } public async Task VerifyChatPair(long chat, int user) { var hasEntry = await databaseContext.Users.AnyAsync(e => e.ChatId == chat && e.UserId == user); if (hasEntry) { return; } await MakeChatPair(chat, user); } public async Task MakeChatPair(long chat, int user) { await databaseContext.Users.AddAsync(new BotUser() { ChatId = chat, UserId = user, BotUserId = new Guid() }); } } }