[][src]Struct serenity::model::channel::GuildChannel

pub struct GuildChannel {
    pub id: ChannelId,
    pub bitrate: Option<u64>,
    pub category_id: Option<ChannelId>,
    pub guild_id: GuildId,
    pub kind: ChannelType,
    pub last_message_id: Option<MessageId>,
    pub last_pin_timestamp: Option<DateTime<FixedOffset>>,
    pub name: String,
    pub permission_overwrites: Vec<PermissionOverwrite>,
    pub position: i64,
    pub topic: Option<String>,
    pub user_limit: Option<u64>,
    pub nsfw: bool,
}

Represents a guild's text or voice channel. Some methods are available only for voice channels and some are only available for text channels.

Fields

id: ChannelId

The unique Id of the channel.

The default channel Id shares the Id of the guild and the default role.

bitrate: Option<u64>

The bitrate of the channel.

Note: This is only available for voice channels.

category_id: Option<ChannelId>

Whether this guild channel belongs in a category.

guild_id: GuildId

The Id of the guild the channel is located in.

If this matches with the id, then this is the default text channel.

The original voice channel has an Id equal to the guild's Id, incremented by one.

kind: ChannelType

The type of the channel.

last_message_id: Option<MessageId>

The Id of the last message sent in the channel.

Note: This is only available for text channels.

last_pin_timestamp: Option<DateTime<FixedOffset>>

The timestamp of the time a pin was most recently made.

Note: This is only available for text channels.

name: String

The name of the channel.

permission_overwrites: Vec<PermissionOverwrite>

Permission overwrites for Members and for Roles.

position: i64

The position of the channel.

The default text channel will almost always have a position of -1 or 0.

topic: Option<String>

The topic of the channel.

Note: This is only available for text channels.

user_limit: Option<u64>

The maximum number of members allowed in the channel.

Note: This is only available for voice channels.

nsfw: bool

Used to tell if the channel is not safe for work. Note however, it's recommended to use is_nsfw as it's gonna be more accurate.

Methods

impl GuildChannel[src]

pub fn broadcast_typing(&self) -> Result<()>[src]

Broadcasts to the channel that the current user is typing.

For bots, this is a good indicator for long-running commands.

Note: Requires the Send Messages permission.

Errors

Returns a ModelError::InvalidPermissions if the current user does not have the required permissions.

pub fn create_invite<F>(&self, f: F) -> Result<RichInvite> where
    F: FnOnce(CreateInvite) -> CreateInvite
[src]

Creates an invite leading to the given channel.

Examples

Create an invite that can only be used 5 times:

This example is not tested
let invite = channel.create_invite(|i| i.max_uses(5));

pub fn create_permission(&self, target: &PermissionOverwrite) -> Result<()>[src]

Creates a permission overwrite for either a single Member or Role within a Channel.

Refer to the documentation for PermissionOverwrites for more information.

Requires the Manage Channels permission.

Examples

Creating a permission overwrite for a member by specifying the PermissionOverwrite::Member variant, allowing it the Send Messages permission, but denying the Send TTS Messages and Attach Files permissions:

use serenity::model::channel::{
    PermissionOverwrite,
    PermissionOverwriteType,
};
use serenity::model::{ModelError, Permissions};

let allow = Permissions::SEND_MESSAGES;
let deny = Permissions::SEND_TTS_MESSAGES | Permissions::ATTACH_FILES;
let overwrite = PermissionOverwrite {
    allow: allow,
    deny: deny,
    kind: PermissionOverwriteType::Member(user_id),
};

let channel = channel_id.to_channel().expect("Could not request channel via REST.");

if let Channel::Guild(channel) = channel {
    let channel = channel.read();
    channel.create_permission(&overwrite)?;
}

Creating a permission overwrite for a role by specifying the PermissionOverwrite::Role variant, allowing it the Manage Webhooks permission, but denying the Send TTS Messages and Attach Files permissions:

use serenity::model::channel::{
    PermissionOverwrite,
    PermissionOverwriteType,
};
use serenity::model::{ModelError, Permissions, channel::Channel};

let allow = Permissions::SEND_MESSAGES;
let deny = Permissions::SEND_TTS_MESSAGES | Permissions::ATTACH_FILES;
let overwrite = PermissionOverwrite {
    allow: allow,
    deny: deny,
    kind: PermissionOverwriteType::Member(user_id),
};

let channel = channel_id.to_channel().expect("Could not request channel via REST.");

if let Channel::Guild(channel) = channel {
    let channel = channel.read();
    channel.create_permission(&overwrite)?;
}

pub fn delete(&self) -> Result<Channel>[src]

Deletes this channel, returning the channel on a successful deletion.

pub fn delete_messages<T: AsRef<MessageId>, It: IntoIterator<Item = T>>(
    &self,
    message_ids: It
) -> Result<()>
[src]

Deletes all messages by Ids from the given vector in the channel.

Refer to Channel::delete_messages for more information.

Requires the Manage Messages permission.

Note: Messages that are older than 2 weeks can't be deleted using this method.

Errors

Returns ModelError::BulkDeleteAmount if an attempt was made to delete either 0 or more than 100 messages.

pub fn delete_permission(
    &self,
    permission_type: PermissionOverwriteType
) -> Result<()>
[src]

Deletes all permission overrides in the channel from a member or role.

Note: Requires the Manage Channel permission.

pub fn delete_reaction<M, R>(
    &self,
    message_id: M,
    user_id: Option<UserId>,
    reaction_type: R
) -> Result<()> where
    M: Into<MessageId>,
    R: Into<ReactionType>, 
[src]

Deletes the given Reaction from the channel.

Note: Requires the Manage Messages permission, if the current user did not perform the reaction.

pub fn edit<F>(&mut self, f: F) -> Result<()> where
    F: FnOnce(EditChannel) -> EditChannel
[src]

Modifies a channel's settings, such as its position or name.

Refer to EditChannels documentation for a full list of methods.

Examples

Change a voice channels name and bitrate:

This example is not tested
channel.edit(|c| c.name("test").bitrate(86400));

pub fn edit_message<F, M>(&self, message_id: M, f: F) -> Result<Message> where
    F: FnOnce(EditMessage) -> EditMessage,
    M: Into<MessageId>, 
[src]

Edits a Message in the channel given its Id.

Message editing preserves all unchanged message data.

Refer to the documentation for EditMessage for more information regarding message restrictions and requirements.

Note: Requires that the current user be the author of the message.

Errors

Returns a ModelError::MessageTooLong if the content of the message is over the the limit, containing the number of unicode code points over the limit.

pub fn guild(&self) -> Option<Arc<RwLock<Guild>>>[src]

Attempts to find this channel's guild in the Cache.

Note: Right now this performs a clone of the guild. This will be optimized in the future.

pub fn invites(&self) -> Result<Vec<RichInvite>>[src]

Gets all of the channel's invites.

Requires the [Manage Channels] permission. [Manage Channels]: ../permissions/struct.Permissions.html#associatedconstant.MANAGE_CHANNELS

pub fn is_nsfw(&self) -> bool[src]

Determines if the channel is NSFW.

Only text channels are taken into consideration as being NSFW. voice channels are never NSFW.

pub fn message<M: Into<MessageId>>(&self, message_id: M) -> Result<Message>[src]

Gets a message from the channel.

Requires the Read Message History permission.

pub fn messages<F>(&self, f: F) -> Result<Vec<Message>> where
    F: FnOnce(GetMessages) -> GetMessages
[src]

Gets messages from the channel.

Refer to Channel::messages for more information.

Requires the Read Message History permission.

pub fn name(&self) -> &str[src]

Returns the name of the guild channel.

pub fn permissions_for<U: Into<UserId>>(
    &self,
    user_id: U
) -> Result<Permissions>
[src]

Calculates the permissions of a member.

The Id of the argument must be a Member of the Guild that the channel is in.

Examples

Calculate the permissions of a User who posted a Message in a channel:

use serenity::prelude::*;
use serenity::model::prelude::*;
struct Handler;

use serenity::CACHE;

impl EventHandler for Handler {
    fn message(&self, _: Context, msg: Message) {
        let channel = match CACHE.read().guild_channel(msg.channel_id) {
            Some(channel) => channel,
            None => return,
        };

        let permissions = channel.read().permissions_for(&msg.author).unwrap();

        println!("The user's permissions: {:?}", permissions);
    }
}
let mut client = Client::new("token", Handler).unwrap();

client.start().unwrap();

Check if the current user has the Attach Files and Send Messages permissions (note: serenity will automatically check this for; this is for demonstrative purposes):

use serenity::prelude::*;
use serenity::model::prelude::*;
use serenity::model::channel::Channel;
use serenity::CACHE;
use std::fs::File;

struct Handler;

impl EventHandler for Handler {
    fn message(&self, _: Context, msg: Message) {
        if let Ok(Channel::Guild(guild_channel)) = msg.channel_id.to_channel() {

            let current_user_id = CACHE.read().user.id;
            let guild_channel = guild_channel.read();
            let permissions = guild_channel.permissions_for(current_user_id).unwrap();

            if !permissions.contains(Permissions::ATTACH_FILES | Permissions::SEND_MESSAGES) {
                return;
            }

            let file = match File::open("./cat.png") {
                Ok(file) => file,
                Err(why) => {
                    println!("Err opening file: {:?}", why);

                    return;
                },
            };

            let _ = msg.channel_id.send_files(vec![(&file, "cat.png")], |m|
                m.content("here's a cat"));
        }
    }
}

let mut client = Client::new("token", Handler).unwrap();

client.start().unwrap();

Errors

Returns a ModelError::GuildNotFound if the channel's guild could not be found in the Cache.

pub fn pin<M: Into<MessageId>>(&self, message_id: M) -> Result<()>[src]

Pins a Message to the channel.

pub fn pins(&self) -> Result<Vec<Message>>[src]

Gets all channel's pins.

pub fn reaction_users<M, R, U>(
    &self,
    message_id: M,
    reaction_type: R,
    limit: Option<u8>,
    after: U
) -> Result<Vec<User>> where
    M: Into<MessageId>,
    R: Into<ReactionType>,
    U: Into<Option<UserId>>, 
[src]

Gets the list of Users who have reacted to a Message with a certain Emoji.

Refer to Channel::reaction_users for more information.

Note: Requires the Read Message History permission.

pub fn say(&self, content: &str) -> Result<Message>[src]

Sends a message with just the given message content in the channel.

Errors

Returns a ModelError::MessageTooLong if the content of the message is over the above limit, containing the number of unicode code points over the limit.

pub fn send_files<'a, F, T, It: IntoIterator<Item = T>>(
    &self,
    files: It,
    f: F
) -> Result<Message> where
    F: FnOnce(CreateMessage) -> CreateMessage,
    T: Into<AttachmentType<'a>>, 
[src]

Sends (a) file(s) along with optional message contents.

Refer to ChannelId::send_files for examples and more information.

The Attach Files and Send Messages permissions are required.

Note: Message contents must be under 2000 unicode code points.

Errors

If the content of the message is over the above limit, then a ClientError::MessageTooLong will be returned, containing the number of unicode code points over the limit.

pub fn send_message<F: FnOnce(CreateMessage) -> CreateMessage>(
    &self,
    f: F
) -> Result<Message>
[src]

Sends a message to the channel with the given content.

Note: This will only work when a Message is received.

Note: Requires the Send Messages permission.

Errors

Returns a ModelError::MessageTooLong if the content of the message is over the above limit, containing the number of unicode code points over the limit.

Returns a ModelError::InvalidPermissions if the current user does not have the required permissions.

pub fn unpin<M: Into<MessageId>>(&self, message_id: M) -> Result<()>[src]

Unpins a Message in the channel given by its Id.

Requires the Manage Messages permission.

pub fn webhooks(&self) -> Result<Vec<Webhook>>[src]

Retrieves the channel's webhooks.

Note: Requires the Manage Webhooks permission.

Trait Implementations

impl Mentionable for GuildChannel[src]

impl From<GuildChannel> for ChannelId[src]

fn from(public_channel: GuildChannel) -> ChannelId[src]

Gets the Id of a guild channel.

impl<'a> From<&'a GuildChannel> for ChannelId[src]

fn from(public_channel: &GuildChannel) -> ChannelId[src]

Gets the Id of a guild channel.

impl Clone for GuildChannel[src]

fn clone_from(&mut self, source: &Self)
1.0.0
[src]

Performs copy-assignment from source. Read more

impl Display for GuildChannel[src]

fn fmt(&self, f: &mut Formatter) -> FmtResult[src]

Formats the channel, creating a mention of it.

impl Debug for GuildChannel[src]

impl Serialize for GuildChannel[src]

impl<'de> Deserialize<'de> for GuildChannel[src]

Auto Trait Implementations

Blanket Implementations

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T> From for T[src]

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> DeserializeOwned for T where
    T: Deserialize<'de>, 
[src]

impl<T> Erased for T

impl<T> Typeable for T where
    T: Any

fn get_type(&self) -> TypeId

Get the TypeId of this object.

impl<T> DebugAny for T where
    T: Any + Debug
[src]

impl<T> CloneAny for T where
    T: Clone + Any
[src]

impl<T> UnsafeAny for T where
    T: Any