mirror of
https://github.com/natsukagami/youmubot.git
synced 2025-05-24 09:10:49 +00:00
osu: Run score scan for sender of leaderboard
This commit is contained in:
parent
0fd5379446
commit
229e6a911f
1 changed files with 31 additions and 4 deletions
|
@ -1,9 +1,12 @@
|
||||||
use super::{
|
use super::{
|
||||||
cache::get_beatmap,
|
cache::get_beatmap,
|
||||||
db::{OsuSavedUsers, OsuUserBests},
|
db::{OsuSavedUsers, OsuUserBests},
|
||||||
ModeArg,
|
ModeArg, OsuClient,
|
||||||
|
};
|
||||||
|
use crate::{
|
||||||
|
models::{Mode, Score},
|
||||||
|
request::UserID,
|
||||||
};
|
};
|
||||||
use crate::models::{Mode, Score};
|
|
||||||
use serenity::{
|
use serenity::{
|
||||||
framework::standard::{macros::command, Args, CommandResult},
|
framework::standard::{macros::command, Args, CommandResult},
|
||||||
model::channel::Message,
|
model::channel::Message,
|
||||||
|
@ -105,6 +108,7 @@ pub async fn server_rank(ctx: &Context, m: &Message, mut args: Args) -> CommandR
|
||||||
#[only_in(guilds)]
|
#[only_in(guilds)]
|
||||||
pub async fn leaderboard(ctx: &Context, m: &Message, mut _args: Args) -> CommandResult {
|
pub async fn leaderboard(ctx: &Context, m: &Message, mut _args: Args) -> CommandResult {
|
||||||
let data = ctx.data.read().await;
|
let data = ctx.data.read().await;
|
||||||
|
let mut osu_user_bests = OsuUserBests::open(&*data);
|
||||||
let bm = match get_beatmap(&*data, m.channel_id)? {
|
let bm = match get_beatmap(&*data, m.channel_id)? {
|
||||||
Some(bm) => bm,
|
Some(bm) => bm,
|
||||||
None => {
|
None => {
|
||||||
|
@ -113,13 +117,36 @@ pub async fn leaderboard(ctx: &Context, m: &Message, mut _args: Args) -> Command
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Run a check on the user once too!
|
||||||
|
{
|
||||||
|
let osu_users = OsuSavedUsers::open(&*data);
|
||||||
|
let user = osu_users.borrow()?.get(&m.author.id).map(|v| v.id);
|
||||||
|
if let Some(id) = user {
|
||||||
|
let osu = data.get::<OsuClient>().unwrap();
|
||||||
|
if let Ok(scores) = osu
|
||||||
|
.scores(bm.0.beatmap_id, |f| f.user(UserID::ID(id)))
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
if !scores.is_empty() {
|
||||||
|
osu_user_bests
|
||||||
|
.borrow_mut()?
|
||||||
|
.entry((bm.0.beatmap_id, bm.1))
|
||||||
|
.or_default()
|
||||||
|
.insert(m.author.id, scores);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let guild = m.guild_id.expect("Guild-only command");
|
let guild = m.guild_id.expect("Guild-only command");
|
||||||
let scores = {
|
let scores = {
|
||||||
const NO_SCORES: &'static str =
|
const NO_SCORES: &'static str =
|
||||||
"No scores have been recorded for this beatmap. Run `osu check` to scan for yours!";
|
"No scores have been recorded for this beatmap. Run `osu check` to scan for yours!";
|
||||||
|
|
||||||
let users = OsuUserBests::open(&*data);
|
let users = osu_user_bests
|
||||||
let users = users.borrow()?.get(&(bm.0.beatmap_id, bm.1)).cloned();
|
.borrow()?
|
||||||
|
.get(&(bm.0.beatmap_id, bm.1))
|
||||||
|
.cloned();
|
||||||
let users = match users {
|
let users = match users {
|
||||||
None => {
|
None => {
|
||||||
m.reply(&ctx, NO_SCORES).await?;
|
m.reply(&ctx, NO_SCORES).await?;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue