public static async Task OnMessageReceived(SocketMessage msg) { if (msg is not SocketUserMessage userMsg || userMsg.Content == null || userMsg.Author.Id == Program.Client.CurrentUser.Id || userMsg.Author.IsBot) { return; } SocketCommandContext context = new SocketCommandContext(Program.Client, userMsg); if (await Games.WordRelay(context)) { return; } if (await Games.TypingGame(context)) { return; } int argPos = 0; if (userMsg.HasStringPrefix(prefix, ref argPos) || userMsg.HasMentionPrefix(Program.Client.CurrentUser, ref argPos)) { await Program.Command.ExecuteAsync(context, argPos, Program.Service); } if (context.IsPrivate) { return; } OliveGuild guild = OliveGuild.Get(context.Guild.Id); if (!guild.Setting.EnabledCategories.Contains(RequireCategoryEnable.CategoryType.Level)) { return; } if (guild.Setting.NonXpChannels.Contains(context.Channel.Id)) { return; } string UserId = context.User.Id.ToString(); if (guild.Levels.ContainsKey(UserId)) { guild.Levels[UserId].Xp++; if (guild.Levels[UserId].Xp >= Utility.GetLevelXp(guild.Levels[UserId].Level)) { guild.Levels[UserId].Level++; guild.Levels[UserId].Xp = 0; string lv = guild.Levels[UserId].Level.ToString(); if (guild.Setting.LevelUpChannelId.HasValue && context.Guild.Channels.Any(c => c.Id == guild.Setting.LevelUpChannelId.Value)) { SocketTextChannel c = context.Guild.GetTextChannel(guild.Setting.LevelUpChannelId.Value); await c.SendMessageAsync($"{context.User.Mention}님, {lv}레벨이 되신걸 축하해요! :tada:"); } else { await context.MsgReplyEmbedAsync($"{context.User.Mention}님, {lv}레벨이 되신걸 축하해요! :tada:", disalbeMention : false); } if (guild.Setting.LevelRoles.ContainsKey(lv) && context.Guild.Roles.Any(r => r.Id == guild.Setting.LevelRoles[lv])) { await(context.User as SocketGuildUser).AddRoleAsync(context.Guild.GetRole(guild.Setting.LevelRoles[lv])); } } } else { guild.Levels.Add(UserId, new OliveGuild.UserLevel()); guild.Levels[UserId].Xp++; } OliveGuild.Set(context.Guild.Id, g => g.Levels, guild.Levels); }