Class: MatrixSdk::Room
Overview
A class for tracking the information about a room on Matrix
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.
-
#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.
-
#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.
-
#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.
-
#tags ⇒ Response
Returns a list of the room tags.
-
#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 |
# File 'lib/matrix_sdk/room.rb', line 65 def initialize(client, room_id, data = {}) 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 @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)
110 111 112 |
# File 'lib/matrix_sdk/room.rb', line 110 def on_ephemeral_event ensure_room_handlers[:ephemeral_event] end |
#on_event ⇒ Object (readonly)
98 99 100 |
# File 'lib/matrix_sdk/room.rb', line 98 def on_event ensure_room_handlers[:event] end |
#on_state_event ⇒ Object (readonly)
104 105 106 |
# File 'lib/matrix_sdk/room.rb', line 104 def on_state_event ensure_room_handlers[:state_event] end |
Instance Method Details
#add_alias(room_alias) ⇒ Boolean
Add an alias to the room
597 598 599 600 601 |
# File 'lib/matrix_sdk/room.rb', line 597 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
542 543 544 545 |
# File 'lib/matrix_sdk/room.rb', line 542 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
702 703 704 705 706 707 708 709 710 |
# File 'lib/matrix_sdk/room.rb', line 702 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
690 691 692 693 694 695 |
# File 'lib/matrix_sdk/room.rb', line 690 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
245 246 247 248 249 250 251 252 253 |
# File 'lib/matrix_sdk/room.rb', line 245 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.key?(:content) && chunk[:content].key?(:aliases) } .map { |chunk| chunk[: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
167 168 169 |
# File 'lib/matrix_sdk/room.rb', line 167 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
633 634 635 636 |
# File 'lib/matrix_sdk/room.rb', line 633 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
186 187 188 189 190 191 |
# File 'lib/matrix_sdk/room.rb', line 186 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
650 651 652 653 654 655 656 657 |
# File 'lib/matrix_sdk/room.rb', line 650 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::MATRIX 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
395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 |
# File 'lib/matrix_sdk/room.rb', line 395 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
442 443 444 445 446 |
# File 'lib/matrix_sdk/room.rb', line 442 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.
143 144 145 146 147 |
# File 'lib/matrix_sdk/room.rb', line 143 def canonical_alias client.api.get_room_state(id, 'm.room.canonical_alias')[:alias] rescue MatrixSdk::MatrixNotFoundError nil 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.
127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/matrix_sdk/room.rb', line 127 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
471 472 473 |
# File 'lib/matrix_sdk/room.rb', line 471 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
206 207 208 |
# File 'lib/matrix_sdk/room.rb', line 206 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
641 642 643 644 645 |
# File 'lib/matrix_sdk/room.rb', line 641 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
218 219 220 |
# File 'lib/matrix_sdk/room.rb', line 218 def guest_access? guest_access == :can_join end |
#history_visibility ⇒ :invited, ...
Gets the history visibility of the room
230 231 232 |
# File 'lib/matrix_sdk/room.rb', line 230 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 |
#invite_only=(invite_only) ⇒ Object
Sets if the room should be invite only or not
616 617 618 619 |
# File 'lib/matrix_sdk/room.rb', line 616 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
223 224 225 |
# File 'lib/matrix_sdk/room.rb', line 223 def invite_only? join_rule == :invite end |
#invite_user(user_id) ⇒ Boolean
Invites a user into the room
420 421 422 423 424 |
# File 'lib/matrix_sdk/room.rb', line 420 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
213 214 215 |
# File 'lib/matrix_sdk/room.rb', line 213 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
624 625 626 627 628 |
# File 'lib/matrix_sdk/room.rb', line 624 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
152 153 154 155 156 157 158 |
# File 'lib/matrix_sdk/room.rb', line 152 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
431 432 433 434 435 |
# File 'lib/matrix_sdk/room.rb', line 431 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 |
#leave ⇒ Boolean
Requests to be removed from the room
461 462 463 464 465 |
# File 'lib/matrix_sdk/room.rb', line 461 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
730 731 732 733 734 735 736 737 738 |
# File 'lib/matrix_sdk/room.rb', line 730 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
718 719 720 721 722 723 |
# File 'lib/matrix_sdk/room.rb', line 718 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
767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 |
# File 'lib/matrix_sdk/room.rb', line 767 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
745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 |
# File 'lib/matrix_sdk/room.rb', line 745 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 data[:users].merge!(users) data[:users].delete_if { |_k, v| v.nil? } 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
176 177 178 179 180 181 |
# File 'lib/matrix_sdk/room.rb', line 176 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
563 564 565 566 567 |
# File 'lib/matrix_sdk/room.rb', line 563 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
664 665 666 |
# File 'lib/matrix_sdk/room.rb', line 664 def power_levels client.api.get_power_levels(id) end |
#redact_message(event_id, reason = nil) ⇒ Object
Redacts a message from the room
375 376 377 378 |
# File 'lib/matrix_sdk/room.rb', line 375 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
552 553 554 555 556 557 |
# File 'lib/matrix_sdk/room.rb', line 552 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
608 609 610 |
# File 'lib/matrix_sdk/room.rb', line 608 def reload_aliases! clear_aliases_cache end |
#reload_name! ⇒ Boolean Also known as: refresh_name!
Reloads the name of the room
572 573 574 |
# File 'lib/matrix_sdk/room.rb', line 572 def reload_name! clear_name_cache end |
#reload_topic! ⇒ Boolean Also known as: refresh_topic!
Reloads the topic of the room
589 590 591 |
# File 'lib/matrix_sdk/room.rb', line 589 def reload_topic! clear_topic_cache end |
#remove_tag(tag) ⇒ Object
Remove a tag from the room
533 534 535 536 |
# File 'lib/matrix_sdk/room.rb', line 533 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
385 386 387 388 |
# File 'lib/matrix_sdk/room.rb', line 385 def (event_id, reason:, score: -100) client.api.report_event(id, event_id, reason: reason, score: score) true 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
367 368 369 |
# File 'lib/matrix_sdk/room.rb', line 367 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
289 290 291 |
# File 'lib/matrix_sdk/room.rb', line 289 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
303 304 305 |
# File 'lib/matrix_sdk/room.rb', line 303 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
275 276 277 278 279 280 281 282 283 284 |
# File 'lib/matrix_sdk/room.rb', line 275 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
326 327 328 |
# File 'lib/matrix_sdk/room.rb', line 326 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
337 338 339 |
# File 'lib/matrix_sdk/room.rb', line 337 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
310 311 312 |
# File 'lib/matrix_sdk/room.rb', line 310 def send_notice(text) client.api.send_notice(id, text) end |
#send_text(text) ⇒ Object
Sends a plain-text message to the room
262 263 264 |
# File 'lib/matrix_sdk/room.rb', line 262 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
354 355 356 |
# File 'lib/matrix_sdk/room.rb', line 354 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
479 480 481 482 |
# File 'lib/matrix_sdk/room.rb', line 479 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
489 490 491 492 493 494 495 496 497 498 499 500 |
# File 'lib/matrix_sdk/room.rb', line 489 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 |
#tags ⇒ Response
Returns a list of the room tags
512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 |
# File 'lib/matrix_sdk/room.rb', line 512 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 |
#topic ⇒ String?
Gets the room topic - if any
196 197 198 199 200 201 |
# File 'lib/matrix_sdk/room.rb', line 196 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
580 581 582 583 584 |
# File 'lib/matrix_sdk/room.rb', line 580 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
452 453 454 455 456 |
# File 'lib/matrix_sdk/room.rb', line 452 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
674 675 676 677 678 679 680 681 682 |
# File 'lib/matrix_sdk/room.rb', line 674 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[: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
237 238 239 |
# File 'lib/matrix_sdk/room.rb', line 237 def world_readable? history_visibility == :world_readable end |