internal static async Task HandleEvent(SocketMessage message) { if (message.Channel is ITextChannel) { var matches = EmoteRegex.Matches(message.Content); if (matches.Count > 0) { await using (var database = new BachuzContext()) { foreach (Match match in matches) { var firstColonIndex = match.Value.IndexOf(':'); var secondColonIndex = match.Value.IndexOf(':', firstColonIndex + 1); var emoteId = match.Value.Substring(secondColonIndex + 1); emoteId = emoteId.Substring(0, emoteId.Length - 1); var emote = await database.Emotes.FirstAsync(e => e.EmoteId == ulong.Parse(emoteId)); emote.Count += 1; await database.SaveChangesAsync(); } } } } }
internal static async Task HandleEvent(SocketUser user, SocketVoiceState before, SocketVoiceState after) { await using (var database = new BachuzContext()) { var inUserTable = database.Users.AsQueryable().FirstOrDefault(item => item.UserId == user.Id); if (inUserTable == null) { var dbUser = new Users { UserId = user.Id, Points = 0, LastUsedDaily = null }; await database.Users.AddAsync(dbUser); await database.SaveChangesAsync(); } } if (before.VoiceChannel == null && after.VoiceChannel != null) { await HandleJoin(user, after); } else if (before.VoiceChannel != null && after.VoiceChannel == null) { await HandleLeave(user); } else if (before.VoiceChannel != null && (after.VoiceChannel != null && before.VoiceChannel.Id != after.VoiceChannel.Id)) { await HandleLeave(user); await HandleJoin(user, after); } }
public async Task SetPrefix(string prefix) { if (prefix.Length > 6) { await ReplyAsync("Prefix cannot be longer than 6 characters."); return; } if (string.IsNullOrEmpty(prefix)) { await ReplyAsync("Prefix cannot be empty"); return; } Program.CustomPrefixes.AddOrUpdate(Context.Guild.Id, prefix, (key, oldValue) => prefix); await using (var database = new BachuzContext()) { var guild = database.Guilds.AsQueryable().FirstOrDefault(item => item.GuildId == Context.Guild.Id); guild.CustomPrefix = prefix; await database.SaveChangesAsync(); } await Context.Channel.SendMessageAsync($"Prefix has been set to: {prefix}").ConfigureAwait(false); }
internal static async Task HandleEvent(SocketGuild guild) { await using (var database = new BachuzContext()) { Guilds newGuild = new Guilds { GuildId = guild.Id }; await database.Guilds.AddAsync(newGuild); var emotes = new List <Emotes>(); foreach (var guildEmote in guild.Emotes) { emotes.Add(new Emotes { EmoteId = guildEmote.Id, Name = guildEmote.Name, Count = 0, GuildId = guild.Id, }); } await database.Emotes.AddRangeAsync(emotes); await database.SaveChangesAsync(); } }
internal static async Task HandleEvent(SocketGuild guild) { await using (var database = new BachuzContext()) { database.Remove(database.Guilds.Single(g => g.GuildId == guild.Id)); await database.SaveChangesAsync(); } }
internal static async Task HandleEvent(SocketGuild before, SocketGuild after) { if (before.Emotes.Count > after.Emotes.Count) { var removedEmote = before.Emotes.Except(after.Emotes).First(); await using (var database = new BachuzContext()) { database.Remove(database.Emotes.Single(e => e.EmoteId == removedEmote.Id)); await database.SaveChangesAsync(); } } else if (after.Emotes.Count > before.Emotes.Count) { var addedEmote = after.Emotes.Except(before.Emotes).First(); await using (var database = new BachuzContext()) { Emotes newEmote = new Emotes { EmoteId = addedEmote.Id, GuildId = after.Id, Name = addedEmote.Name, Count = 0 }; await database.Emotes.AddAsync(newEmote); await database.SaveChangesAsync(); } } else { // updates Emote name in database var updatedEmote = (from emoteAfter in after.Emotes let emoteBefore = before.Emotes .First(e => e.Id == emoteAfter.Id) where emoteAfter.Name != emoteBefore.Name select emoteAfter) .FirstOrDefault(); if (updatedEmote != null) { await using (var database = new BachuzContext()) { var emote = database.Emotes.First(e => e.EmoteId == updatedEmote.Id); emote.Name = updatedEmote.Name; await database.SaveChangesAsync(); } } } }
public async Task VoiceInfo(ResultType resultType = ResultType.General) { await using (var database = new BachuzContext()) { if (resultType == ResultType.Detailed) { var usersOnVoice = await database.UsersOnVoice.AsQueryable().Where(user => user.Guild.GuildId == Context.Guild.Id).OrderByDescending(user => user.Time).ToListAsync(); var sb = new StringBuilder(); sb.AppendLine("Time spend on voice channels in this server:"); foreach (var user in usersOnVoice) { sb.AppendLine($"<@{user.UserId}> <#{user.VoiceChannelId}> - {TimeSpan.FromSeconds(user.Time)}"); } var chunks = Utilities.SplitMessage(sb.ToString()); foreach (var chunk in chunks) { await Context.Channel.SendMessageAsync(chunk, allowedMentions : AllowedMentions.None) .ConfigureAwait(false); } } else if (resultType == ResultType.General) { var usersOnVoice = await database.UsersOnVoice.AsQueryable() .Where(user => user.Guild.GuildId == Context.Guild.Id) .GroupBy(user => user.UserId) .Select(o => new { UserId = o.Key, Time = o.Sum(s => s.Time) }) .OrderByDescending(user => user.Time) .ToListAsync(); var sb = new StringBuilder(); sb.AppendLine("Time spend on voice channels in this server:"); foreach (var user in usersOnVoice) { sb.AppendLine($"<@{user.UserId}> - {TimeSpan.FromSeconds(user.Time)}"); } var chunks = Utilities.SplitMessage(sb.ToString()); foreach (var chunk in chunks) { await Context.Channel.SendMessageAsync(chunk, allowedMentions : AllowedMentions.None) .ConfigureAwait(false); } } } }
public async Task VoiceInfo(SocketUser guildUser, ResultType resultType = ResultType.General) { await using (var database = new BachuzContext()) { if (resultType == ResultType.General) { var userData = database.UsersOnVoice.AsQueryable() .Where(user => user.Guild.GuildId == Context.Guild.Id && user.UserId == guildUser.Id) .GroupBy(user => user.UserId) .Select(o => new { UserId = o.Key, Time = o.Sum(s => s.Time) }) .OrderByDescending(user => user.Time) .FirstOrDefault(); await Context.Channel.SendMessageAsync($"<@{userData.UserId}> total time on voice channels in this guild - {TimeSpan.FromSeconds(userData.Time)}", allowedMentions : AllowedMentions.None) .ConfigureAwait(false); } else { var usersOnVoice = await database.UsersOnVoice.AsQueryable() .Where(user => user.Guild.GuildId == Context.Guild.Id && user.UserId == guildUser.Id) .OrderByDescending(user => user.Time) .ToListAsync(); var response = new StringBuilder(); foreach (var user in usersOnVoice) { response.AppendLine( $"<@{user.UserId}> <#{user.VoiceChannelId}> - {TimeSpan.FromSeconds(user.Time)}"); } var chunks = Utilities.SplitMessage(response.ToString()); foreach (var chunk in chunks) { await Context.Channel.SendMessageAsync(chunk, allowedMentions : AllowedMentions.None) .ConfigureAwait(false); } } } }
public async Task MainAsync(string[] args) { _config = BuildConfig(); await using (var database = new BachuzContext()) { foreach (var guild in database.Guilds.AsQueryable().Select(item => item)) { if (!string.IsNullOrEmpty(guild.CustomPrefix)) { CustomPrefixes.TryAdd(Convert.ToUInt64(guild.GuildId), guild.CustomPrefix); } } } await using var services = ConfigureServices(); var client = services.GetRequiredService <DiscordSocketClient>(); client.Log += LogAsync; services.GetRequiredService <CommandService>().Log += LogAsync; await client.LoginAsync(TokenType.Bot, _config["token"]); await client.StartAsync(); await services.GetRequiredService <CommandHandlingService>().InstallCommandsAsync(); client.JoinedGuild += JoinedGuild.HandleEvent; client.LeftGuild += LeftGuild.HandleEvent; client.GuildUpdated += GuildUpdated.HandleEvent; client.MessageReceived += MessageReceived.HandleEvent; client.UserVoiceStateUpdated += UserVoiceStateUpdated.HandleEvent; client.Ready += () => { client.SetActivityAsync(new Game($"Default prefix: {_config["prefix"]}")); return(Task.CompletedTask); }; await CreateHostBuilder(args).Build().RunAsync(); await Task.Delay(-1); }
public async Task EmotesInfo() { await using (var database = new BachuzContext()) { var emotes = await database.Emotes.AsQueryable().Where(emote => emote.Guild.GuildId == Context.Guild.Id).OrderByDescending(emote => emote.Count).ToListAsync(); var sb = new StringBuilder(); sb.AppendLine("Emotes usage in this server:"); foreach (var emote in emotes) { sb.AppendLine($"<:{emote.Name}:{emote.EmoteId}> - {emote.Count}"); } var chunks = Utilities.SplitMessage(sb.ToString()); foreach (var chunk in chunks) { await Context.Channel.SendMessageAsync(chunk, allowedMentions : AllowedMentions.None) .ConfigureAwait(false); } } }
private static async Task HandleLeave(SocketUser user) { VoicechatMonitoringService.UsersOnVoiceChannels.TryRemove(user.Id, out var leavingUser); if (leavingUser != null) { var timeOnVoice = Convert.ToInt32((DateTime.Now - leavingUser.JoinTime).TotalSeconds); await using (var database = new BachuzContext()) { var voiceUser = database.UsersOnVoice .AsQueryable() .Select(item => item) .FirstOrDefault(item => item.GuildId == leavingUser.GuildId && item.UserId == leavingUser.UserId && item.VoiceChannelId == leavingUser.VoiceChannelId ); if (voiceUser == null) { var userOnVoice = new UsersOnVoice { UserId = leavingUser.UserId, VoiceChannelId = leavingUser.VoiceChannelId, GuildId = leavingUser.GuildId, Time = timeOnVoice }; await database.UsersOnVoice.AddAsync(userOnVoice); await database.SaveChangesAsync(); } else { voiceUser.Time += timeOnVoice; await database.SaveChangesAsync(); } } } }