/// <summary> /// On Guild Available event handler /// </summary> /// <param name="guild">Guild that has become available</param> /// <returns>void</returns> private async Task OnGuildAvaiable(SocketGuild guild) { // Check if BotConfig has been loaded yet // Will not fire if setup has not been performed if (BotConfig.GuildId != 0 && BotConfig.ChannelId != 0 && BotConfig.MessageId != 0 && BotConfig.BotEmbedMessage == null) { var config = BotConfig; config.BotEmbedMessage = await guild.GetTextChannel(config.ChannelId)?.GetMessageAsync(config.MessageId) !as IUserMessage; BotConfig = config; } }
private async Task MainAsync() { if (!File.Exists(ConfigHelper.ConfigName)) { ConfigHelper.CreateConfigFile(); } BotConfig = ConfigHelper.LoadConfigFile(); discord = new DiscordSocketClient(new DiscordSocketConfig { LogLevel = LogSeverity.Info, GatewayIntents = GatewayIntents.Guilds | GatewayIntents.GuildMessages | GatewayIntents.GuildMessageReactions | GatewayIntents.GuildVoiceStates }); var services = ConfigureServices(); var loggingService = services.GetRequiredService <LoggingService>(); await services.GetRequiredService <CommandHandlerService>().InitializeAsync(services); services.GetRequiredService <ReactionsHelper>(); await discord.LoginAsync(TokenType.Bot, BotConfig.Token); await discord.StartAsync(); discord.GuildAvailable += OnGuildAvaiable; discord.Ready += async() => { _ = Task.Run(async() => { var node = services.GetRequiredService <LavaNode>(); if (!node.IsConnected) { await node.ConnectAsync(); } }); //Sets Listening activity await discord.SetGameAsync("music", type : ActivityType.Listening); }; // Voice state updated handler // user -> SocketUser // before -> VoiceState before // after -> VoiceState after // discord.UserVoiceStateUpdated += async (user, before, after) => // { // if (user.Id == discord.CurrentUser.Id && before.VoiceChannel == null) // { // try // { // var node = services.GetRequiredService<LavaNode>(); // var player = node.GetPlayer((user as IGuildUser).Guild); // await player.UpdateVolumeAsync(BotConfig.Volume); // } // catch { } // } // }; // Trap Ctrl+C Console.CancelKeyPress += (s, e) => BotExit(services); // Trap process exit AppDomain.CurrentDomain.ProcessExit += (s, e) => BotExit(services); await Task.Delay(-1); }