public async Task OsuProfile(InteractionContext ctx, [Option("nickname", "Никнейм юзера")] string nickname, [Choice("Bancho server", "bancho")] [Choice("Gatari server", "gatari")] [Option("server", "Возможные параметры: bancho, gatari")] string args) { if (!(ctx.Channel.Name.Contains("-bot") || ctx.Channel.Name.Contains("dev-announce"))) { await ctx.CreateResponseAsync(DSharpPlus.InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder().WithContent("Использование данной команды запрещено в этом текстовом канале. Используйте специально отведенный канал для ботов, связанных с osu!.") .AsEphemeral(true)); return; } if (string.IsNullOrEmpty(nickname)) { await ctx.CreateResponseAsync(DSharpPlus.InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder().WithContent("Вы ввели пустой никнейм..") .AsEphemeral(true)); return; } if (args.Contains("gatari")) { GUser guser = null; if (!gapi.TryGetUser(nickname, ref guser)) { await ctx.CreateResponseAsync(DSharpPlus.InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder().WithContent($"Не удалось получить информацию о пользователе `{nickname}`.") .AsEphemeral(true));; return; } List <GScore> gscores = gapi.GetUserBestScores(guser.id, 5); if (gscores is null || gscores.Count == 0) { await ctx.CreateResponseAsync(DSharpPlus.InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder().WithContent($"Не удалось получить информацию о лучших скорах пользователя `{nickname}`.") .AsEphemeral(true)); return; } GStatistics gstats = gapi.GetUserStats(guser.username); if (gstats is null) { await ctx.CreateResponseAsync(DSharpPlus.InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder().WithContent($"Не удалось получить статистику пользователя `{nickname}`.") .AsEphemeral(true)); return; } DiscordEmbed gembed = utils.UserToEmbed(guser, gstats, gscores); await ctx.CreateResponseAsync(DSharpPlus.InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder().AddEmbed(gembed)); return; } if (args.Contains("bancho")) { User user = null; if (!api.TryGetUser(nickname, ref user)) { await ctx.CreateResponseAsync(DSharpPlus.InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder().WithContent($"Не удалось получить информацию о пользователе `{nickname}`.") .AsEphemeral(true)); return; } List <Score> scores = api.GetUserBestScores(user.id, 5); if (scores is null || scores.Count == 0) { await ctx.CreateResponseAsync(DSharpPlus.InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder().WithContent($"Не удалось получить информацию о лучших скорах пользователя `{nickname}`.") .AsEphemeral(true)); return; } DiscordEmbed embed = utils.UserToEmbed(user, scores); await ctx.CreateResponseAsync(DSharpPlus.InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder().AddEmbed(embed)); } await ctx.CreateResponseAsync(DSharpPlus.InteractionResponseType.ChannelMessageWithSource, new DiscordInteractionResponseBuilder().WithContent("Введенный сервер не поддерживается или не существует.") .AsEphemeral(true)); }
private async Task Client_MessageCreated(DiscordClient sender, DSharpPlus.EventArgs.MessageCreateEventArgs e) { if (!e.Message.Content.Contains("http")) return; if (!(e.Channel.Name.Contains("-osu") || e.Channel.Name.Contains("map-offer") || e.Channel.Name.Contains("bot-debug") || e.Channel.Name.Contains("dev-announce") || e.Channel.Name.Contains("www-register"))) return; // Check, if it is map url from bancho Tuple<int, int> BMSandBMid = utils.GetBMandBMSIdFromBanchoUrl(e.Message.Content); if (!(BMSandBMid is null)) { int bms_id = BMSandBMid.Item1, bm_id = BMSandBMid.Item2; Beatmap bm = api.GetBeatmap(bm_id); Beatmapset bms = api.GetBeatmapset(bms_id); GBeatmap gbm = gapi.TryGetBeatmap(bm_id); if (!(bm is null || bms is null)) { DiscordEmbed embed = utils.BeatmapToEmbed(bm, bms, gbm); await e.Message.RespondAsync(embed: embed); } return; } // Check, if it is beatmapset url from gatari int? BMSid = utils.GetBMSIdFromGatariUrl(e.Message.Content); if (!(BMSid is null)) { int bms_id = (int)BMSid; Beatmapset bms = api.GetBeatmapset(bms_id); int bm_id = bms.beatmaps.First().id; Beatmap bm = api.GetBeatmap(bm_id); GBeatmap gbm = gapi.TryGetBeatmap(bm_id); if (!(bm is null || bms is null)) { DiscordEmbed embed = utils.BeatmapToEmbed(bm, bms, gbm); await e.Message.RespondAsync(embed: embed); } return; } // Check, if it is beatmap url from gatari int? BMid = utils.GetBMIdFromGatariUrl(e.Message.Content); if (!(BMid is null)) { int bm_id = (int)BMid; Beatmap bm = api.GetBeatmap(bm_id); Beatmapset bms = api.GetBeatmapset(bm.beatmapset_id); GBeatmap gbm = gapi.TryGetBeatmap(bm_id); if (!(bm is null || bms is null)) { DiscordEmbed embed = utils.BeatmapToEmbed(bm, bms, gbm); await e.Message.RespondAsync(embed: embed); } return; } // Check, if it is user link from bancho int? userId = utils.GetUserIdFromBanchoUrl(e.Message.Content); if (!(userId is null)) { int user_id = (int)userId; User user = null; if (!api.TryGetUser(user_id, ref user)) return; List<Score> scores = api.GetUserBestScores(user_id, 5); if (!(scores is null) && scores.Count == 5) { DiscordEmbed embed = utils.UserToEmbed(user, scores); await e.Message.RespondAsync(embed: embed); } return; } // Check, if it is user link from bancho int? guserId = utils.GetUserIdFromGatariUrl(e.Message.Content); if (!(guserId is null)) { int guser_id = (int)guserId; GUser guser = null; if (!gapi.TryGetUser(guser_id, ref guser)) return; List<GScore> gscores = gapi.GetUserBestScores(guser.id, 5); if (gscores is null || gscores.Count == 0) return; GStatistics gstats = gapi.GetUserStats(guser.username); if (gstats is null) return; DiscordEmbed gembed = utils.UserToEmbed(guser, gstats, gscores); await e.Message.RespondAsync(embed: gembed); return; } }