Class: MatrixSdk::Room
Overview
A class for tracking the information about a room on Matrix
Direct Known Subclasses
Constant Summary
Constants included from Util::Tinycache
Instance Attribute Summary collapse
-
#client ⇒ Client
readonly
The client for the room.
-
#event_history_limit ⇒ Fixnum
The limit of events to keep in the event log.
-
#events ⇒ Object
readonly
Returns the value of attribute events.
-
#id ⇒ String
(also: #room_id)
readonly
The internal ID of the room.
- #on_ephemeral_event ⇒ Object readonly
- #on_event ⇒ Object readonly
- #on_state_event ⇒ Object readonly
Instance Method Summary collapse
-
#add_alias(room_alias) ⇒ Boolean
Add an alias to the room.
-
#add_tag(tag, **data) ⇒ Object
Add a tag to the room.
-
#admin!(user, level: 100) ⇒ Object
Make a user an admin in the room.
-
#admin?(user, target_level: 100) ⇒ Boolean
Check if a user is an admin in the room.
-
#aliases ⇒ Array[String]
Gets the room aliases.
-
#all_members(**params) ⇒ Array(User)
Get all members (member events) in the room.
-
#allow_guests=(allow_guests) ⇒ Object
Sets if guests are allowed in the room.
-
#avatar_url ⇒ String?
Gets the avatar url of the room - if any.
-
#avatar_url=(avatar_url) ⇒ Object
Sets a new avatar URL for the room.
-
#backfill_messages(*args, reverse: false, limit: 10) ⇒ Object
Backfills messages into the room history.
-
#ban_user(user_id, reason = '') ⇒ Boolean
Bans a user from the room.
-
#canonical_alias ⇒ String?
The canonical alias of the room.
-
#creation_info ⇒ Response
Gets the room creation information.
-
#display_name ⇒ String
Gets a human-readable name for the room.
-
#get_account_data(type) ⇒ Hash
Retrieves a custom entry from the room-specific account data.
-
#guest_access ⇒ :can_join, :forbidden
Gets the guest access rights for the room.
-
#guest_access=(guest_access) ⇒ Object
Sets the guest access status for the room.
-
#guest_access? ⇒ Boolean
Checks if
guest_accessis set to:can_join. -
#history_visibility ⇒ :invited, ...
Gets the history visibility of the room.
-
#initialize(client, room_id, data = {}) ⇒ Room
constructor
Create a new room instance.
-
#inspect ⇒ String
An inspect method that skips a handful of instance variables to avoid flooding the terminal with debug data.
-
#invite_only=(invite_only) ⇒ Object
Sets if the room should be invite only or not.
-
#invite_only? ⇒ Boolean
Checks if
join_ruleis set to:invite. -
#invite_user(user_id) ⇒ Boolean
Invites a user into the room.
-
#join_rule ⇒ :public, ...
Gets the join rule for the room.
-
#join_rule=(join_rule) ⇒ Object
Sets the join rule of the room.
-
#joined_members ⇒ Array(User)
Populates and returns the #members array.
-
#kick_user(user_id, reason = '') ⇒ Boolean
Kicks a user from the room.
-
#knock_only? ⇒ Boolean
Checks if
join_ruleis set to:knock. -
#leave ⇒ Boolean
Requests to be removed from the room.
- #members ⇒ Object
-
#moderator!(user, level: 50) ⇒ Object
Make a user a moderator in the room.
-
#moderator?(user, target_level: 50) ⇒ Boolean
Check if a user is a moderator in the room.
-
#modify_required_power_levels(events = nil, params = {}) ⇒ Boolean
Modifies the required power levels for actions in the room.
-
#modify_user_power_levels(users = nil, users_default = nil) ⇒ Boolean
Modifies the power levels of the room.
-
#name ⇒ String?
Gets the current name of the room, querying the API if necessary.
-
#name=(name) ⇒ Object
Sets a new name on the room.
-
#power_levels ⇒ Hash
Get the power levels of the room.
-
#redact_message(event_id, reason = nil) ⇒ Object
Redacts a message from the room.
-
#reload! ⇒ Object
(also: #refresh!)
Refreshes the room state caches for name, topic, and aliases.
-
#reload_aliases! ⇒ Boolean
(also: #refresh_aliases!)
Reloads the list of aliases by an API query.
-
#reload_name! ⇒ Boolean
(also: #refresh_name!)
Reloads the name of the room.
-
#reload_topic! ⇒ Boolean
(also: #refresh_topic!)
Reloads the topic of the room.
-
#remove_tag(tag) ⇒ Object
Remove a tag from the room.
-
#report_message(event_id, reason:, score: -100)) ⇒ Object
Reports a message in the room.
-
#room_type ⇒ 'm.space', ...
Retrieves the type of the room.
-
#room_version ⇒ String
Retrieves the room version.
-
#send_audio(url, name, audio_info = {}) ⇒ Object
Sends a link to an audio clip to the room.
-
#send_emote(text) ⇒ Object
Sends an emote (/me) message to the room.
-
#send_file(url, name, file_info = {}) ⇒ Object
Sends a link to a generic file to the room.
-
#send_html(html, body = nil, msgtype: nil, format: nil) ⇒ Object
Sends a custom HTML message to the room.
-
#send_image(url, name, image_info = {}) ⇒ Object
Sends a link to an image to the room.
-
#send_location(geo_uri, name, thumbnail_url = nil, thumbnail_info = {}) ⇒ Object
Sends a location object to the room.
-
#send_notice(text) ⇒ Object
Sends a notice (bot) message to the room.
-
#send_text(text) ⇒ Object
Sends a plain-text message to the room.
-
#send_video(url, name, video_info = {}) ⇒ Object
Sends a link to a video to the room.
-
#set_account_data(type, account_data) ⇒ Object
Stores a custom entry into the room-specific account data.
-
#set_user_profile(display_name: nil, avatar_url: nil, reason: nil) ⇒ Object
Changes the room-specific user profile.
-
#space? ⇒ Boolean?
Checks if the room is a Matrix Space.
-
#tags ⇒ Response
Returns a list of the room tags.
- #to_s ⇒ Object
-
#to_space ⇒ Object
Casting operators.
-
#topic ⇒ String?
Gets the room topic - if any.
-
#topic=(topic) ⇒ Object
Sets a new topic on the room.
-
#unban_user(user_id) ⇒ Boolean
Unbans a user from the room.
-
#user_powerlevel(user, use_default: true) ⇒ Integer?
Gets the power level of a user in the room.
-
#world_readable? ⇒ Boolean
(also: #world_readable)
Checks if the room history is world readable.
Methods included from Extensions
Methods included from Util::Tinycache
adapter, adapter=, cached, extended, tinycache_adapter_config
Methods included from Logging
Constructor Details
#initialize(client, room_id, data = {}) ⇒ Room
This method isn’t supposed to be used directly, rather rooms should be retrieved from the Client abstraction.
Create a new room instance
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/matrix_sdk/room.rb', line 65 def initialize(client, room_id, data = {}) if client.is_a? Room copy = client client = copy.client room_id = copy.id # data = copy.attributes end raise ArgumentError, 'Must be given a Client instance' unless client.is_a? Client @client = client room_id = MXID.new room_id unless room_id.is_a?(MXID) raise ArgumentError, 'room_id must be a valid Room ID' unless room_id.room_id? @events = [] @event_history_limit = 10 @room_type = nil @prev_batch = nil data.each do |k, v| next if i[client].include? k if respond_to?("#{k}_cached?".to_sym) && send("#{k}_cached?".to_sym) tinycache_adapter.write(k, v) elsif instance_variable_defined? "@#{k}" instance_variable_set("@#{k}", v) end end @id = room_id.to_s logger.debug "Created room #{room_id}" end |
Instance Attribute Details
#client ⇒ Client (readonly)
Returns the client for the room.
25 |
# File 'lib/matrix_sdk/room.rb', line 25 attr_reader :id, :client, :events |
#event_history_limit ⇒ Fixnum
Returns the limit of events to keep in the event log.
16 17 18 |
# File 'lib/matrix_sdk/room.rb', line 16 def event_history_limit @event_history_limit end |
#events ⇒ Object (readonly)
Returns the value of attribute events.
25 |
# File 'lib/matrix_sdk/room.rb', line 25 attr_reader :id, :client, :events |
#id ⇒ String (readonly) Also known as: room_id
Returns the internal ID of the room.
25 26 27 |
# File 'lib/matrix_sdk/room.rb', line 25 def id @id end |
#on_ephemeral_event ⇒ Object (readonly)
136 137 138 |
# File 'lib/matrix_sdk/room.rb', line 136 def on_ephemeral_event ensure_room_handlers[:ephemeral_event] end |
#on_event ⇒ Object (readonly)
124 125 126 |
# File 'lib/matrix_sdk/room.rb', line 124 def on_event ensure_room_handlers[:event] end |
#on_state_event ⇒ Object (readonly)
130 131 132 |
# File 'lib/matrix_sdk/room.rb', line 130 def on_state_event ensure_room_handlers[:state_event] end |
Instance Method Details
#add_alias(room_alias) ⇒ Boolean
Add an alias to the room
663 664 665 666 667 |
# File 'lib/matrix_sdk/room.rb', line 663 def add_alias(room_alias) client.api.set_room_alias(id, room_alias) tinycache_adapter.read(:aliases) << room_alias if tinycache_adapter.exist?(:aliases) true end |
#add_tag(tag, **data) ⇒ Object
Add a tag to the room
608 609 610 611 |
# File 'lib/matrix_sdk/room.rb', line 608 def add_tag(tag, **data) client.api.add_user_tag(client.mxid, id, tag, data) true end |
#admin!(user, level: 100) ⇒ Object
Make a user an admin in the room
768 769 770 771 772 773 774 775 776 |
# File 'lib/matrix_sdk/room.rb', line 768 def admin!(user, level: 100) return true if admin?(user, target_level: level) user = user.id if user.is_a? User user = MXID.new(user.to_s) unless user.is_a? MXID raise ArgumentError, 'Must provide a valid user or MXID' unless user.user? modify_user_power_levels({ user.to_s.to_sym => level }) end |
#admin?(user, target_level: 100) ⇒ Boolean
Check if a user is an admin in the room
756 757 758 759 760 761 |
# File 'lib/matrix_sdk/room.rb', line 756 def admin?(user, target_level: 100) level = user_powerlevel(user, use_default: false) return false unless level level >= target_level end |
#aliases ⇒ Array[String]
Gets the room aliases
276 277 278 279 280 281 282 283 284 |
# File 'lib/matrix_sdk/room.rb', line 276 def aliases client.api.get_room_aliases(id).aliases rescue MatrixNotFoundError data = client.api.get_room_state_all(id) data.select { |chunk| chunk[:type] == 'm.room.aliases' && !chunk.dig(*i[content aliases]).nil? } .map { |chunk| chunk.dig(*i[content aliases]) } .flatten .compact end |
#all_members(**params) ⇒ Array(User)
This will also count members who’ve knocked, been invited, have left, or have been banned.
Get all members (member events) in the room
193 194 195 |
# File 'lib/matrix_sdk/room.rb', line 193 def all_members(**params) client.api.get_room_members(id, **params)[:chunk].map { |ch| client.get_user(ch[:state_key]) } end |
#allow_guests=(allow_guests) ⇒ Object
Sets if guests are allowed in the room
699 700 701 702 |
# File 'lib/matrix_sdk/room.rb', line 699 def allow_guests=(allow_guests) self.guest_access = (allow_guests ? :can_join : :forbidden) allow_guests end |
#avatar_url ⇒ String?
Gets the avatar url of the room - if any
212 213 214 215 216 217 |
# File 'lib/matrix_sdk/room.rb', line 212 def avatar_url client.api.get_room_avatar(id)[:url] rescue MatrixNotFoundError # No avatar has been set nil end |
#avatar_url=(avatar_url) ⇒ Object
Sets a new avatar URL for the room
716 717 718 719 720 721 722 723 |
# File 'lib/matrix_sdk/room.rb', line 716 def avatar_url=(avatar_url) avatar_url = URI(avatar_url) unless avatar_url.is_a? URI raise ArgumentError, 'Must be a valid MXC URL' unless avatar_url.is_a? URI::MXC client.api.set_room_avatar(id, avatar_url) tinycache_adapter.write(:avatar_url, avatar_url) avatar_url end |
#backfill_messages(*args, reverse: false, limit: 10) ⇒ Object
This will trigger the on_event events as messages are added
Backfills messages into the room history
426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 |
# File 'lib/matrix_sdk/room.rb', line 426 def (*args, reverse: false, limit: 10) # To be backwards-compatible if args.length == 2 reverse = args.first limit = args.last end data = client.api.(id, @prev_batch, direction: :b, limit: limit) events = data[:chunk] events.reverse! unless reverse events.each do |ev| put_event(ev) end true end |
#ban_user(user_id, reason = '') ⇒ Boolean
Bans a user from the room
473 474 475 476 477 |
# File 'lib/matrix_sdk/room.rb', line 473 def ban_user(user_id, reason = '') user_id = user_id.id if user_id.is_a? MatrixSdk::User client.api.ban_user(id, user_id, reason: reason) true end |
#canonical_alias ⇒ String?
Returns the canonical alias of the room.
169 170 171 172 173 |
# File 'lib/matrix_sdk/room.rb', line 169 def canonical_alias client.api.get_room_state(id, 'm.room.canonical_alias')[:alias] rescue MatrixSdk::MatrixNotFoundError nil end |
#creation_info ⇒ Response
Gets the room creation information
536 537 538 539 |
# File 'lib/matrix_sdk/room.rb', line 536 def creation_info # Not caching here, easier to cache the important values separately instead client.api.get_room_creation_info(id) end |
#display_name ⇒ String
This method will populate the #members list if it has to fall back to the member name generation.
Gets a human-readable name for the room
This will return #name or #canonical_alias if they’ve been set, otherwise it will query the API for members and generate a string from a subset of their names.
153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/matrix_sdk/room.rb', line 153 def display_name return name if name return canonical_alias if canonical_alias members = joined_members .reject { |m| m.user_id == client.mxid } .map(&:display_name) return members.first if members.one? return "#{members.first} and #{members.last}" if members.count == 2 return "#{members.first} and #{members.count - 1} others" if members.count > 2 'Empty Room' end |
#get_account_data(type) ⇒ Hash
Retrieves a custom entry from the room-specific account data
502 503 504 |
# File 'lib/matrix_sdk/room.rb', line 502 def get_account_data(type) client.api.get_room_account_data(client.mxid, id, type) end |
#guest_access ⇒ :can_join, :forbidden
Gets the guest access rights for the room
232 233 234 |
# File 'lib/matrix_sdk/room.rb', line 232 def guest_access client.api.get_room_guest_access(id)[:guest_access]&.to_sym end |
#guest_access=(guest_access) ⇒ Object
Sets the guest access status for the room
707 708 709 710 711 |
# File 'lib/matrix_sdk/room.rb', line 707 def guest_access=(guest_access) client.api.set_room_guest_access(id, guest_access) tinycache_adapter.write(:guest_access, guest_access) guest_access end |
#guest_access? ⇒ Boolean
Checks if guest_access is set to :can_join
244 245 246 |
# File 'lib/matrix_sdk/room.rb', line 244 def guest_access? guest_access == :can_join end |
#history_visibility ⇒ :invited, ...
Gets the history visibility of the room
261 262 263 |
# File 'lib/matrix_sdk/room.rb', line 261 def history_visibility client.api.get_room_state(id, 'm.room.history_visibility')[:history_visibility]&.to_sym end |
#inspect ⇒ String
An inspect method that skips a handful of instance variables to avoid flooding the terminal with debug data.
31 |
# File 'lib/matrix_sdk/room.rb', line 31 ignore_inspect :client, :events, :prev_batch, :logger, :tinycache_adapter |
#invite_only=(invite_only) ⇒ Object
Sets if the room should be invite only or not
682 683 684 685 |
# File 'lib/matrix_sdk/room.rb', line 682 def invite_only=(invite_only) self.join_rule = invite_only ? :invite : :public invite_only end |
#invite_only? ⇒ Boolean
Checks if join_rule is set to :invite
249 250 251 |
# File 'lib/matrix_sdk/room.rb', line 249 def invite_only? join_rule == :invite end |
#invite_user(user_id) ⇒ Boolean
Invites a user into the room
451 452 453 454 455 |
# File 'lib/matrix_sdk/room.rb', line 451 def invite_user(user_id) user_id = user_id.id if user_id.is_a? MatrixSdk::User client.api.invite_user(id, user_id) true end |
#join_rule ⇒ :public, ...
Gets the join rule for the room
239 240 241 |
# File 'lib/matrix_sdk/room.rb', line 239 def join_rule client.api.get_room_join_rules(id)[:join_rule]&.to_sym end |
#join_rule=(join_rule) ⇒ Object
Sets the join rule of the room
690 691 692 693 694 |
# File 'lib/matrix_sdk/room.rb', line 690 def join_rule=(join_rule) client.api.set_room_join_rules(id, join_rule) tinycache_adapter.write(:join_rule, join_rule) join_rule end |
#joined_members ⇒ Array(User)
Populates and returns the #members array
178 179 180 181 182 183 184 |
# File 'lib/matrix_sdk/room.rb', line 178 def joined_members client.api.get_room_joined_members(id)[:joined].map do |mxid, data| User.new(client, mxid.to_s, display_name: data.fetch(:display_name, nil), avatar_url: data.fetch(:avatar_url, nil)) end end |
#kick_user(user_id, reason = '') ⇒ Boolean
Kicks a user from the room
462 463 464 465 466 |
# File 'lib/matrix_sdk/room.rb', line 462 def kick_user(user_id, reason = '') user_id = user_id.id if user_id.is_a? MatrixSdk::User client.api.kick_user(id, user_id, reason: reason) true end |
#knock_only? ⇒ Boolean
Checks if join_rule is set to :knock
254 255 256 |
# File 'lib/matrix_sdk/room.rb', line 254 def knock_only? join_rule == :knock end |
#leave ⇒ Boolean
Requests to be removed from the room
492 493 494 495 496 |
# File 'lib/matrix_sdk/room.rb', line 492 def leave client.api.leave_room(id) client.instance_variable_get(:@rooms).delete id true end |
#members ⇒ Object
42 |
# File 'lib/matrix_sdk/room.rb', line 42 alias members joined_members |
#moderator!(user, level: 50) ⇒ Object
Make a user a moderator in the room
796 797 798 799 800 801 802 803 804 |
# File 'lib/matrix_sdk/room.rb', line 796 def moderator!(user, level: 50) return true if moderator?(user, target_level: level) user = user.id if user.is_a? User user = MXID.new(user.to_s) unless user.is_a? MXID raise ArgumentError, 'Must provide a valid user or MXID' unless user.user? modify_user_power_levels({ user.to_s.to_sym => level }) end |
#moderator?(user, target_level: 50) ⇒ Boolean
Check if a user is a moderator in the room
784 785 786 787 788 789 |
# File 'lib/matrix_sdk/room.rb', line 784 def moderator?(user, target_level: 50) level = user_powerlevel(user, use_default: false) return false unless level level >= target_level end |
#modify_required_power_levels(events = nil, params = {}) ⇒ Boolean
Modifies the required power levels for actions in the room
842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 |
# File 'lib/matrix_sdk/room.rb', line 842 def modify_required_power_levels(events = nil, params = {}) return false if events.nil? && (params.nil? || params.empty?) data = power_levels_without_cache tinycache_adapter.write(:power_levels, data) data.merge!(params) data.delete_if { |_k, v| v.nil? } if events data[:events] = {} unless data.key? :events data[:events].merge!(events) data[:events].delete_if { |_k, v| v.nil? } end client.api.set_power_levels(id, data) true end |
#modify_user_power_levels(users = nil, users_default = nil) ⇒ Boolean
Modifies the power levels of the room
811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 |
# File 'lib/matrix_sdk/room.rb', line 811 def modify_user_power_levels(users = nil, users_default = nil) return false if users.nil? && users_default.nil? data = power_levels_without_cache tinycache_adapter.write(:power_levels, data) data[:users_default] = users_default unless users_default.nil? if users data[:users] = {} unless data.key? :users users.each do |user, level| user = user.id if user.is_a? User user = MXID.new(user.to_s) unless user.is_a? MXID raise ArgumentError, 'Must provide a valid user or MXID' unless user.user? if level.nil? data[:users].delete(user.to_s.to_sym) else data[:users][user.to_s.to_sym] = level end end end client.api.set_power_levels(id, data) true end |
#name ⇒ String?
Will cache the current name for 15 minutes
Gets the current name of the room, querying the API if necessary
202 203 204 205 206 207 |
# File 'lib/matrix_sdk/room.rb', line 202 def name client.api.get_room_name(id)[:name] rescue MatrixNotFoundError # No room name has been specified nil end |
#name=(name) ⇒ Object
Sets a new name on the room
629 630 631 632 633 |
# File 'lib/matrix_sdk/room.rb', line 629 def name=(name) tinycache_adapter.write(:name, name) client.api.set_room_name(id, name) name end |
#power_levels ⇒ Hash
The returned power levels are cached for a minute
Get the power levels of the room
730 731 732 |
# File 'lib/matrix_sdk/room.rb', line 730 def power_levels client.api.get_power_levels(id) end |
#redact_message(event_id, reason = nil) ⇒ Object
Redacts a message from the room
406 407 408 409 |
# File 'lib/matrix_sdk/room.rb', line 406 def (event_id, reason = nil) client.api.redact_event(id, event_id, reason: reason) true end |
#reload! ⇒ Object Also known as: refresh!
Refreshes the room state caches for name, topic, and aliases
618 619 620 621 622 623 |
# File 'lib/matrix_sdk/room.rb', line 618 def reload! reload_name! reload_topic! reload_aliases! true end |
#reload_aliases! ⇒ Boolean Also known as: refresh_aliases!
The list of aliases is not sorted, ordering changes will result in alias list updates.
Reloads the list of aliases by an API query
674 675 676 |
# File 'lib/matrix_sdk/room.rb', line 674 def reload_aliases! clear_aliases_cache end |
#reload_name! ⇒ Boolean Also known as: refresh_name!
Reloads the name of the room
638 639 640 |
# File 'lib/matrix_sdk/room.rb', line 638 def reload_name! clear_name_cache end |
#reload_topic! ⇒ Boolean Also known as: refresh_topic!
Reloads the topic of the room
655 656 657 |
# File 'lib/matrix_sdk/room.rb', line 655 def reload_topic! clear_topic_cache end |
#remove_tag(tag) ⇒ Object
Remove a tag from the room
599 600 601 602 |
# File 'lib/matrix_sdk/room.rb', line 599 def remove_tag(tag) client.api.remove_user_tag(client.mxid, id, tag) true end |
#report_message(event_id, reason:, score: -100)) ⇒ Object
Reports a message in the room
416 417 418 419 |
# File 'lib/matrix_sdk/room.rb', line 416 def (event_id, reason:, score: -100) client.api.report_event(id, event_id, reason: reason, score: score) true end |
#room_type ⇒ 'm.space', ...
Retrieves the type of the room
544 545 546 547 548 549 550 |
# File 'lib/matrix_sdk/room.rb', line 544 def room_type # Can't change, so a permanent cache is ok return @room_type if @room_type_retrieved || @room_type @room_type_retrieved = true @room_type ||= creation_info[:type] end |
#room_version ⇒ String
Retrieves the room version
555 556 557 |
# File 'lib/matrix_sdk/room.rb', line 555 def room_version @room_version ||= creation_info[:room_version] end |
#send_audio(url, name, audio_info = {}) ⇒ Object
The URLs should all be of the ‘mxc://’ schema
Sends a link to an audio clip to the room
398 399 400 |
# File 'lib/matrix_sdk/room.rb', line 398 def send_audio(url, name, audio_info = {}) client.api.send_content(id, url, name, 'm.audio', extra_information: audio_info) end |
#send_emote(text) ⇒ Object
Sends an emote (/me) message to the room
320 321 322 |
# File 'lib/matrix_sdk/room.rb', line 320 def send_emote(text) client.api.send_emote(id, text) end |
#send_file(url, name, file_info = {}) ⇒ Object
The URLs should all be of the ‘mxc://’ schema
Sends a link to a generic file to the room
334 335 336 |
# File 'lib/matrix_sdk/room.rb', line 334 def send_file(url, name, file_info = {}) client.api.send_content(id, url, name, 'm.file', extra_information: file_info) end |
#send_html(html, body = nil, msgtype: nil, format: nil) ⇒ Object
Sends a custom HTML message to the room
306 307 308 309 310 311 312 313 314 315 |
# File 'lib/matrix_sdk/room.rb', line 306 def send_html(html, body = nil, msgtype: nil, format: nil) content = { body: body || html.gsub(/<\/?[^>]*>/, ''), msgtype: msgtype || 'm.text', format: format || 'org.matrix.custom.html', formatted_body: html } client.api.(id, 'm.room.message', content) end |
#send_image(url, name, image_info = {}) ⇒ Object
The URLs should all be of the ‘mxc://’ schema
Sends a link to an image to the room
357 358 359 |
# File 'lib/matrix_sdk/room.rb', line 357 def send_image(url, name, image_info = {}) client.api.send_content(id, url, name, 'm.image', extra_information: image_info) end |
#send_location(geo_uri, name, thumbnail_url = nil, thumbnail_info = {}) ⇒ Object
The thumbnail URL should be of the ‘mxc://’ schema
Sends a location object to the room
368 369 370 |
# File 'lib/matrix_sdk/room.rb', line 368 def send_location(geo_uri, name, thumbnail_url = nil, thumbnail_info = {}) client.api.send_location(id, geo_uri, name, thumbnail_url: thumbnail_url, thumbnail_info: thumbnail_info) end |
#send_notice(text) ⇒ Object
Sends a notice (bot) message to the room
341 342 343 |
# File 'lib/matrix_sdk/room.rb', line 341 def send_notice(text) client.api.send_notice(id, text) end |
#send_text(text) ⇒ Object
Sends a plain-text message to the room
293 294 295 |
# File 'lib/matrix_sdk/room.rb', line 293 def send_text(text) client.api.(id, text) end |
#send_video(url, name, video_info = {}) ⇒ Object
The URLs should all be of the ‘mxc://’ schema
Sends a link to a video to the room
385 386 387 |
# File 'lib/matrix_sdk/room.rb', line 385 def send_video(url, name, video_info = {}) client.api.send_content(id, url, name, 'm.video', extra_information: video_info) end |
#set_account_data(type, account_data) ⇒ Object
Stores a custom entry into the room-specific account data
510 511 512 513 |
# File 'lib/matrix_sdk/room.rb', line 510 def set_account_data(type, account_data) client.api.set_room_account_data(client.mxid, id, type, account_data) true end |
#set_user_profile(display_name: nil, avatar_url: nil, reason: nil) ⇒ Object
the avatar URL should be a mxc:// URI
Changes the room-specific user profile
520 521 522 523 524 525 526 527 528 529 530 531 |
# File 'lib/matrix_sdk/room.rb', line 520 def set_user_profile(display_name: nil, avatar_url: nil, reason: nil) return nil unless display_name || avatar_url data = client.api.get_membership(id, client.mxid) raise "Can't set profile if you haven't joined the room" unless data[:membership] == 'join' data[:displayname] = display_name unless display_name.nil? data[:avatar_url] = avatar_url unless avatar_url.nil? client.api.set_membership(id, client.mxid, 'join', reason || 'Updating room profile information', data) true end |
#space? ⇒ Boolean?
Checks if the room is a Matrix Space
562 563 564 565 566 |
# File 'lib/matrix_sdk/room.rb', line 562 def space? room_type == 'm.space' rescue MatrixSdk::MatrixForbiddenError, MatrixSdk::MatrixNotFoundError nil end |
#tags ⇒ Response
Returns a list of the room tags
578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 |
# File 'lib/matrix_sdk/room.rb', line 578 def client.api.(client.mxid, id)[:tags].tap do |tag_obj| tag_obj.instance_variable_set(:@room, self) tag_obj.define_singleton_method(:room) do @room end tag_obj.define_singleton_method(:add) do |tag, **data| @room.add_tag(tag.to_s.to_sym, **data) self[tag.to_s.to_sym] = data self end tag_obj.define_singleton_method(:remove) do |tag| @room.remove_tag(tag.to_s.to_sym) delete tag.to_s.to_sym end end end |
#to_s ⇒ Object
110 111 112 113 114 115 116 |
# File 'lib/matrix_sdk/room.rb', line 110 def to_s prefix = canonical_alias if canonical_alias_has_value? prefix ||= id return "#{prefix} | #{name}" if name_has_value? prefix end |
#to_space ⇒ Object
Casting operators
104 105 106 107 108 |
# File 'lib/matrix_sdk/room.rb', line 104 def to_space return nil unless space? Rooms::Space.new self, nil end |
#topic ⇒ String?
Gets the room topic - if any
222 223 224 225 226 227 |
# File 'lib/matrix_sdk/room.rb', line 222 def topic client.api.get_room_topic(id)[:topic] rescue MatrixNotFoundError # No room name has been specified nil end |
#topic=(topic) ⇒ Object
Sets a new topic on the room
646 647 648 649 650 |
# File 'lib/matrix_sdk/room.rb', line 646 def topic=(topic) tinycache_adapter.write(:topic, topic) client.api.set_room_topic(id, topic) topic end |
#unban_user(user_id) ⇒ Boolean
Unbans a user from the room
483 484 485 486 487 |
# File 'lib/matrix_sdk/room.rb', line 483 def unban_user(user_id) user_id = user_id.id if user_id.is_a? MatrixSdk::User client.api.unban_user(id, user_id) true end |
#user_powerlevel(user, use_default: true) ⇒ Integer?
Gets the power level of a user in the room
740 741 742 743 744 745 746 747 748 |
# File 'lib/matrix_sdk/room.rb', line 740 def user_powerlevel(user, use_default: true) user = user.id if user.is_a? User user = MXID.new(user.to_s) unless user.is_a? MXID raise ArgumentError, 'Must provide a valid user or MXID' unless user.user? level = power_levels.dig(:users, user.to_s.to_sym) level = power_levels[:users_default] || 0 if level.nil? && use_default level end |
#world_readable? ⇒ Boolean Also known as: world_readable
Checks if the room history is world readable
268 269 270 |
# File 'lib/matrix_sdk/room.rb', line 268 def world_readable? history_visibility == :world_readable end |