use std::env; use std::str::FromStr; use serenity::model::permissions::Permissions; use serenity::model::id::GuildId; use serenity::model::channel::Message; use serenity::client::CACHE; use url::Url; lazy_static! { static ref REQUIRED_PERMS: Permissions = Permissions::EMBED_LINKS | Permissions::READ_MESSAGES | Permissions::ADD_REACTIONS | Permissions::SEND_MESSAGES | Permissions::SEND_TTS_MESSAGES | Permissions::MENTION_EVERYONE | Permissions::USE_EXTERNAL_EMOJIS | Permissions::CONNECT | Permissions::SPEAK | Permissions::CHANGE_NICKNAME | Permissions::USE_VAD | Permissions::ATTACH_FILES; } lazy_static! { pub static ref OAUTH_URL: Url = Url::parse( &format!( "https://discordapp.com/api/oauth2/authorize?scope=bot&permissions={}&client_id={}", REQUIRED_PERMS.bits(), env::var("THULANI_CLIENT_ID").expect("client ID was missing. please specify THULANI_CLIENT_ID in env or .env."), ) ).unwrap(); } pub fn must_env_lookup(s: &str) -> T { env::var(s).expect(&format!("missing env var {}", s)) .parse::().unwrap_or_else(|_| panic!(format!("bad format for {}", s))) } pub trait GuildLookup { fn guild_id(&self) -> Option; } impl GuildLookup for Message { fn guild_id(&self) -> Option { CACHE.read().guild_channel(self.channel_id).map(|c| c.read().guild_id) } }