Speed up ST command at the cost of large servers
This commit is contained in:
39
src/main.rs
39
src/main.rs
@@ -1,7 +1,7 @@
|
|||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use eyre::{Context as _, Error, OptionExt, Result};
|
use eyre::{Context as _, Error, OptionExt, Result};
|
||||||
use futures::{FutureExt, TryStreamExt};
|
use futures::FutureExt;
|
||||||
use poise::serenity_prelude as serenity;
|
use poise::serenity_prelude as serenity;
|
||||||
use rand::seq::SliceRandom;
|
use rand::seq::SliceRandom;
|
||||||
use rusqlite::OptionalExtension;
|
use rusqlite::OptionalExtension;
|
||||||
@@ -179,7 +179,11 @@ async fn dawn(ctx: Context<'_>) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[poise::command(slash_command, ephemeral)]
|
#[poise::command(slash_command, ephemeral)]
|
||||||
async fn join(ctx: Context<'_>, to: serenity::UserId, user: Option<serenity::UserId>) -> Result<()> {
|
async fn join(
|
||||||
|
ctx: Context<'_>,
|
||||||
|
to: serenity::UserId,
|
||||||
|
user: Option<serenity::UserId>,
|
||||||
|
) -> Result<()> {
|
||||||
let guild = ctx
|
let guild = ctx
|
||||||
.guild_id()
|
.guild_id()
|
||||||
.ok_or_eyre("This bot only works in servers")?;
|
.ok_or_eyre("This bot only works in servers")?;
|
||||||
@@ -195,7 +199,9 @@ async fn join(ctx: Context<'_>, to: serenity::UserId, user: Option<serenity::Use
|
|||||||
|
|
||||||
match channel {
|
match channel {
|
||||||
Some(channel) => {
|
Some(channel) => {
|
||||||
guild.move_member(ctx, user.unwrap_or(ctx.author().id), channel).await?;
|
guild
|
||||||
|
.move_member(ctx, user.unwrap_or(ctx.author().id), channel)
|
||||||
|
.await?;
|
||||||
ctx.reply("Joined player").await?;
|
ctx.reply("Joined player").await?;
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
@@ -213,19 +219,19 @@ async fn st(ctx: Context<'_>, mut spectators: Vec<serenity::UserId>) -> Result<(
|
|||||||
let GuildData { st, .. } = ctx.data().get(guild).await?;
|
let GuildData { st, .. } = ctx.data().get(guild).await?;
|
||||||
spectators.push(ctx.author().id);
|
spectators.push(ctx.author().id);
|
||||||
|
|
||||||
guild
|
futures::future::try_join_all(guild.members(&ctx, None, None).await?.into_iter().map(
|
||||||
.members_iter(&ctx)
|
|member| {
|
||||||
.try_for_each(|member| {
|
|
||||||
let spectators = &spectators;
|
let spectators = &spectators;
|
||||||
async move {
|
async move {
|
||||||
if spectators.contains(&member.user.id) {
|
match (spectators.contains(&member.user.id), member.roles.contains(&st)) {
|
||||||
member.add_role(&ctx, st).await
|
(true, true) | (false, false) => Ok(()),
|
||||||
} else {
|
(true, false) => member.add_role(&ctx, st).await,
|
||||||
member.remove_role(&ctx, st).await
|
(false, true) => member.remove_role(&ctx, st).await,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
},
|
||||||
.await?;
|
))
|
||||||
|
.await?;
|
||||||
|
|
||||||
ctx.reply(format!("{} members given ST", spectators.len()))
|
ctx.reply(format!("{} members given ST", spectators.len()))
|
||||||
.await?;
|
.await?;
|
||||||
@@ -313,7 +319,14 @@ async fn main() -> Result<()> {
|
|||||||
|
|
||||||
let framework = poise::Framework::builder()
|
let framework = poise::Framework::builder()
|
||||||
.options(poise::FrameworkOptions {
|
.options(poise::FrameworkOptions {
|
||||||
commands: vec![dusk(), dawn(), st(), currently_playing(), join(), configure()],
|
commands: vec![
|
||||||
|
dusk(),
|
||||||
|
dawn(),
|
||||||
|
st(),
|
||||||
|
currently_playing(),
|
||||||
|
join(),
|
||||||
|
configure(),
|
||||||
|
],
|
||||||
event_handler: |ctx, ev, ctxf, data| on_event(ctx, ev, ctxf, data).boxed(),
|
event_handler: |ctx, ev, ctxf, data| on_event(ctx, ev, ctxf, data).boxed(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user