Add/remove '(ST)' prefix for nickname
This commit is contained in:
58
src/main.rs
58
src/main.rs
@@ -1,12 +1,16 @@
|
|||||||
use std::{future::Future, io, path::Path};
|
use std::{future::Future, io, path::Path};
|
||||||
|
|
||||||
use ::serenity::all::{ChannelId, GuildId, UserId};
|
use ::serenity::all::{ChannelId, EditMember, GuildId, UserId};
|
||||||
use eyre::{Context as _, Error, OptionExt, Result};
|
use eyre::{Context as _, Error, OptionExt, Result};
|
||||||
use futures::{FutureExt, StreamExt, TryStreamExt};
|
use futures::{FutureExt, StreamExt, TryStreamExt};
|
||||||
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;
|
||||||
use tracing_subscriber::{fmt::{self, format::FmtSpan}, layer::SubscriberExt, EnvFilter};
|
use tracing_subscriber::{
|
||||||
|
fmt::{self, format::FmtSpan},
|
||||||
|
layer::SubscriberExt,
|
||||||
|
EnvFilter,
|
||||||
|
};
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
struct GuildData {
|
struct GuildData {
|
||||||
@@ -175,7 +179,12 @@ async fn collect(
|
|||||||
.flatten()
|
.flatten()
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
move_users(ctx, guild, users.iter().map(|user| (to, user.user.id)).collect()).await?;
|
move_users(
|
||||||
|
ctx,
|
||||||
|
guild,
|
||||||
|
users.iter().map(|user| (to, user.user.id)).collect(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
futures::future::try_join_all(users.iter().map(|user| guild.move_member(&ctx, user, to)))
|
futures::future::try_join_all(users.iter().map(|user| guild.move_member(&ctx, user, to)))
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
@@ -253,33 +262,46 @@ async fn join(
|
|||||||
|
|
||||||
#[poise::command(slash_command, ephemeral)]
|
#[poise::command(slash_command, ephemeral)]
|
||||||
#[tracing::instrument]
|
#[tracing::instrument]
|
||||||
async fn st(ctx: Context<'_>, mut spectators: Vec<serenity::UserId>) -> Result<()> {
|
async fn st(ctx: Context<'_>) -> 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")?;
|
||||||
let GuildData { st, .. } = ctx.data().get(guild).await?;
|
let GuildData { st, .. } = ctx.data().get(guild).await?;
|
||||||
spectators.push(ctx.author().id);
|
|
||||||
|
|
||||||
futures::future::try_join_all(guild.members(&ctx, None, None).await?.into_iter().map(
|
futures::future::try_join_all(guild.members(&ctx, None, None).await?.into_iter().map(
|
||||||
|member| {
|
|mut member| async move {
|
||||||
let spectators = &spectators;
|
match (&member.user == ctx.author(), member.roles.contains(&st)) {
|
||||||
async move {
|
(true, true) | (false, false) => Ok(()),
|
||||||
match (
|
(true, false) => {
|
||||||
spectators.contains(&member.user.id),
|
member
|
||||||
member.roles.contains(&st),
|
.edit(
|
||||||
) {
|
&ctx,
|
||||||
(true, true) | (false, false) => Ok(()),
|
EditMember::new().nickname(format!("(ST) {}", member.display_name())),
|
||||||
(true, false) => member.add_role(&ctx, st).await,
|
)
|
||||||
(false, true) => member.remove_role(&ctx, st).await,
|
.await?;
|
||||||
|
member.add_role(&ctx, st).await
|
||||||
|
}
|
||||||
|
(false, true) => {
|
||||||
|
member
|
||||||
|
.edit(
|
||||||
|
&ctx,
|
||||||
|
EditMember::new().nickname(
|
||||||
|
member
|
||||||
|
.display_name()
|
||||||
|
.strip_prefix("(ST) ")
|
||||||
|
.unwrap_or(member.display_name()),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
member.remove_role(&ctx, st).await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
))
|
))
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
ctx.reply(format!("{} members given ST", spectators.len()))
|
ctx.reply("You have been granted ST").await?;
|
||||||
.await?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user