Class: Discordrb::Channel
- Inherits:
-
Object
- Object
- Discordrb::Channel
- Includes:
- IDObject
- Defined in:
- lib/discordrb/data.rb
Overview
A Discord channel, including data like the topic
Constant Summary collapse
- TEXT_TYPE =
The type string that stands for a text channel
'text'.freeze
- VOICE_TYPE =
The type string that stands for a voice channel
'voice'.freeze
Instance Attribute Summary collapse
-
#name ⇒ String
This channel's name.
-
#permission_overwrites ⇒ Hash<Integer => OpenStruct>
readonly
This channel's permission overwrites, represented as a hash of role/user ID to an OpenStruct which has the
allowanddenyproperties which are Permissions objects respectively. -
#position ⇒ Integer
The channel's position on the channel list.
-
#recipient ⇒ Recipient?
readonly
The recipient of the private messages, or nil if this is not a PM channel.
-
#server ⇒ Server?
readonly
The server this channel is on.
-
#topic ⇒ String
The channel's topic.
-
#type ⇒ String
readonly
The type of this channel (currently either 'text' or 'voice').
Attributes included from IDObject
Instance Method Summary collapse
-
#await(key, attributes = {}, &block) ⇒ Object
Add an Await for a message in this channel.
-
#define_overwrite(thing, allow, deny) ⇒ Object
Defines a permission overwrite for this channel that sets the specified thing to the specified allow and deny permission sets, or change an existing one.
-
#delete ⇒ Object
Permanently deletes this channel.
-
#history(amount, before_id = nil, after_id = nil) ⇒ Array<Message>
Retrieves some of this channel's message history.
-
#inspect ⇒ Object
The inspect method is overwritten to give more useful output.
-
#make_invite(max_age = 0, max_uses = 0, temporary = false, xkcd = false) ⇒ Invite
(also: #invite)
Creates a new invite to this channel.
-
#mention ⇒ String
A string that will mention the channel as a clickable link on Discord.
-
#private? ⇒ true, false
Whether or not this channel is a PM channel.
-
#prune(amount) ⇒ Object
Delete the last N messages on this channel.
-
#send_file(file) ⇒ Object
Sends a file to this channel.
-
#send_message(content, tts = false) ⇒ Message
(also: #send, #message)
Sends a message to this channel.
-
#send_multiple(content) ⇒ Object
Sends multiple messages to a channel.
-
#split_send(content) ⇒ Object
Splits a message into chunks whose length is at most the Discord character limit, then sends them individually.
-
#start_typing ⇒ Object
Starts typing, which displays the typing indicator on the client for five seconds.
-
#text? ⇒ true, false
Whether or not this channel is a text channel.
-
#users ⇒ Array<Member>
The list of users currently in this channel.
-
#voice? ⇒ true, false
Whether or not this channel is a voice channel.
Methods included from IDObject
Instance Attribute Details
#name ⇒ String
Returns this channel's name.
812 813 814 |
# File 'lib/discordrb/data.rb', line 812 def name @name end |
#permission_overwrites ⇒ Hash<Integer => OpenStruct> (readonly)
This channel's permission overwrites, represented as a hash of role/user ID to an OpenStruct which has the
allow and deny properties which are Permissions objects respectively.
832 833 834 |
# File 'lib/discordrb/data.rb', line 832 def end |
#position ⇒ Integer
Returns the channel's position on the channel list.
827 828 829 |
# File 'lib/discordrb/data.rb', line 827 def position @position end |
#recipient ⇒ Recipient? (readonly)
Returns the recipient of the private messages, or nil if this is not a PM channel.
821 822 823 |
# File 'lib/discordrb/data.rb', line 821 def recipient @recipient end |
#server ⇒ Server? (readonly)
Returns the server this channel is on. If this channel is a PM channel, it will be nil.
815 816 817 |
# File 'lib/discordrb/data.rb', line 815 def server @server end |
#topic ⇒ String
Returns the channel's topic.
824 825 826 |
# File 'lib/discordrb/data.rb', line 824 def topic @topic end |
#type ⇒ String (readonly)
Returns the type of this channel (currently either 'text' or 'voice').
818 819 820 |
# File 'lib/discordrb/data.rb', line 818 def type @type end |
Instance Method Details
#await(key, attributes = {}, &block) ⇒ Object
Add an Await for a message in this channel. This is identical in functionality to adding a
Events::MessageEvent await with the in attribute as this channel.
1028 1029 1030 |
# File 'lib/discordrb/data.rb', line 1028 def await(key, attributes = {}, &block) @bot.add_await(key, Discordrb::Events::MessageEvent, { in: @id }.merge(attributes), &block) end |
#define_overwrite(thing, allow, deny) ⇒ Object
Defines a permission overwrite for this channel that sets the specified thing to the specified allow and deny permission sets, or change an existing one.
961 962 963 964 965 966 967 968 969 970 |
# File 'lib/discordrb/data.rb', line 961 def define_overwrite(thing, allow, deny) allow_bits = allow.respond_to?(:bits) ? allow.bits : allow deny_bits = deny.respond_to?(:bits) ? deny.bits : deny if thing.is_a? User API.update_user_overrides(@bot.token, @id, thing.id, allow_bits, deny_bits) elsif thing.is_a? Role API.update_role_overrides(@bot.token, @id, thing.id, allow_bits, deny_bits) end end |
#delete ⇒ Object
Permanently deletes this channel
920 921 922 |
# File 'lib/discordrb/data.rb', line 920 def delete API.delete_channel(@bot.token, @id) end |
#history(amount, before_id = nil, after_id = nil) ⇒ Array<Message>
Retrieves some of this channel's message history.
1003 1004 1005 1006 |
# File 'lib/discordrb/data.rb', line 1003 def history(amount, before_id = nil, after_id = nil) logs = API.channel_log(@bot.token, @id, amount, before_id, after_id) JSON.parse(logs).map { || Message.new(, @bot) } end |
#inspect ⇒ Object
The inspect method is overwritten to give more useful output
1055 1056 1057 |
# File 'lib/discordrb/data.rb', line 1055 def inspect "<Channel name=#{@name} id=#{@id} topic=\"#{@topic}\" type=#{@type} position=#{@position} server=#{@server}>" end |
#make_invite(max_age = 0, max_uses = 0, temporary = false, xkcd = false) ⇒ Invite Also known as: invite
Creates a new invite to this channel.
1038 1039 1040 1041 |
# File 'lib/discordrb/data.rb', line 1038 def make_invite(max_age = 0, max_uses = 0, temporary = false, xkcd = false) response = API.create_invite(@bot.token, @id, max_age, max_uses, temporary, xkcd) Invite.new(JSON.parse(response), @bot) end |
#mention ⇒ String
Returns a string that will mention the channel as a clickable link on Discord.
840 841 842 |
# File 'lib/discordrb/data.rb', line 840 def mention "<##{@id}>" end |
#private? ⇒ true, false
Returns whether or not this channel is a PM channel.
835 836 837 |
# File 'lib/discordrb/data.rb', line 835 def private? @server.nil? end |
#prune(amount) ⇒ Object
Delete the last N messages on this channel.
1011 1012 1013 1014 1015 1016 |
# File 'lib/discordrb/data.rb', line 1011 def prune(amount) raise ArgumentError, 'Can only prune between 2 and 100 messages!' unless amount.between?(2, 100) = history(amount).map(&:id) API.bulk_delete(@bot.token, @id, ) end |
#send_file(file) ⇒ Object
Sends a file to this channel. If it is an image, it will be embedded.
915 916 917 |
# File 'lib/discordrb/data.rb', line 915 def send_file(file) @bot.send_file(@id, file) end |
#send_message(content, tts = false) ⇒ Message Also known as: send, message
Sends a message to this channel.
897 898 899 |
# File 'lib/discordrb/data.rb', line 897 def (content, tts = false) @bot.(@id, content, tts, @server && @server.id) end |
#send_multiple(content) ⇒ Object
Sends multiple messages to a channel
903 904 905 |
# File 'lib/discordrb/data.rb', line 903 def send_multiple(content) content.each { |e| (e) } end |
#split_send(content) ⇒ Object
Splits a message into chunks whose length is at most the Discord character limit, then sends them individually. Useful for sending long messages, but be wary of rate limits!
909 910 911 |
# File 'lib/discordrb/data.rb', line 909 def split_send(content) send_multiple(Discordrb.(content)) end |
#start_typing ⇒ Object
Starts typing, which displays the typing indicator on the client for five seconds. If you want to keep typing you'll have to resend this every five seconds. (An abstraction for this will eventually be coming)
1046 1047 1048 |
# File 'lib/discordrb/data.rb', line 1046 def start_typing API.start_typing(@bot.token, @id) end |
#text? ⇒ true, false
Returns whether or not this channel is a text channel.
884 885 886 |
# File 'lib/discordrb/data.rb', line 884 def text? @type == TEXT_TYPE end |
#users ⇒ Array<Member>
The list of users currently in this channel. This is mostly useful for a voice channel, for a text channel it will just return the users on the server that are online.
985 986 987 988 989 990 991 992 993 |
# File 'lib/discordrb/data.rb', line 985 def users if @type == 'text' @server.members.select { |u| u.status != :offline } else @server.members.select do |user| user.voice_channel.id == @id if user.voice_channel end end end |
#voice? ⇒ true, false
Returns whether or not this channel is a voice channel.
889 890 891 |
# File 'lib/discordrb/data.rb', line 889 def voice? @type == VOICE_TYPE end |