crosspost command
This commit is contained in:
parent
6090db30bc
commit
de5cd63e9c
2 changed files with 55 additions and 2 deletions
51
src/commands/crosspost.rs
Normal file
51
src/commands/crosspost.rs
Normal file
|
@ -0,0 +1,51 @@
|
|||
use crate::util::debug_say;
|
||||
use lazy_static::lazy_static;
|
||||
use log::error;
|
||||
use regex::Regex;
|
||||
use serenity::framework::standard::CommandError;
|
||||
use serenity::framework::standard::{macros::command, Args, CommandResult};
|
||||
use serenity::model::{channel::Message, id::ChannelId};
|
||||
use serenity::prelude::Context;
|
||||
use std::collections::HashMap;
|
||||
use std::str::FromStr;
|
||||
|
||||
lazy_static! {
|
||||
static ref CHANNEL_REGEX: Regex = Regex::new(r"<#\d+>").unwrap();
|
||||
}
|
||||
|
||||
#[command]
|
||||
async fn crosspost(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult {
|
||||
let guild_id = msg.guild_id;
|
||||
let guild_id = match guild_id {
|
||||
Some(guild_id) => guild_id,
|
||||
None => return Err(CommandError::from(String::from("Not in guild"))),
|
||||
};
|
||||
let mut avail_channels: HashMap<ChannelId, _> = guild_id.channels(ctx).await?;
|
||||
avail_channels.remove(&msg.channel_id); // Don't crosspost to current channel.
|
||||
let mut channels = vec![];
|
||||
while args.current().is_some() {
|
||||
let arg = args.current().unwrap();
|
||||
if CHANNEL_REGEX.is_match(&arg) {
|
||||
match avail_channels.get(&ChannelId::from_str(arg.as_ref())?) {
|
||||
Some(channel) => channels.push(channel),
|
||||
None => {}
|
||||
}
|
||||
args.advance();
|
||||
} else {
|
||||
// Stop early if we stop getting channel ids
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
let rest = format!(
|
||||
"Crossposted from <#{}> by {}:\n{}",
|
||||
msg.channel_id,
|
||||
msg.author,
|
||||
args.rest()
|
||||
);
|
||||
for channel in channels {
|
||||
channel.say(ctx, &rest).await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
|
@ -1,13 +1,15 @@
|
|||
use crate::commands::{
|
||||
clap::CLAP_COMMAND, cube::CUBE_COMMAND, heck::HECK_COMMAND, source::SOURCE_COMMAND,
|
||||
clap::CLAP_COMMAND, crosspost::CROSSPOST_COMMAND, cube::CUBE_COMMAND, heck::HECK_COMMAND,
|
||||
source::SOURCE_COMMAND,
|
||||
};
|
||||
use serenity::framework::standard::macros::group;
|
||||
|
||||
mod clap;
|
||||
mod crosspost;
|
||||
mod cube;
|
||||
mod heck;
|
||||
mod source;
|
||||
|
||||
#[group]
|
||||
#[commands(heck, clap, cube, source)]
|
||||
#[commands(heck, clap, cube, source, crosspost)]
|
||||
pub(crate) struct General;
|
||||
|
|
Loading…
Reference in a new issue