discorb-lib/discorb

View on GitHub
sig/discorb/channel/thread.rbs

Summary

Maintainability
Test Coverage
module Discorb
  #
  # Represents a thread.
  # @abstract
  class ThreadChannel < Discorb::Channel
    include Discorb::Messageable

    #
    # Initialize a new thread channel.
    # @private
    #
    # @param [Discorb::Client] client The client.
    # @param [Hash] data The data of the thread channel.
    # @param [Boolean] no_cache Whether to disable the cache.
    def initialize: (
      Discorb::Client client,
      Discorb::json data,
      ?no_cache: bool
    ) -> void

    #
    # Edit the thread.
    # @async
    # @macro edit
    #
    # @param [String] name The name of the thread.
    # @param [Boolean] archived Whether the thread is archived or not.
    # @param [Integer] auto_archive_duration The auto archive duration in seconds.
    # @param [Integer] archive_in Alias of `auto_archive_duration`.
    # @param [Boolean] locked Whether the thread is locked or not.
    # @param [String] reason The reason of editing the thread.
    #
    # @return [Async::Task<self>] The edited thread.
    #
    # @see #archive
    # @see #lock
    # @see #unarchive
    # @see #unlock
    def edit: (
      ?name: String,
      ?archived: bool,
      ?auto_archive_duration: Integer,
      ?archive_in: Integer,
      ?locked: bool,
      ?reason: String?
    ) -> Async::Task[self]

    #
    # Helper method to archive the thread.
    #
    # @param [String] reason The reason of archiving the thread.
    #
    # @return [Async::Task<self>] The archived thread.
    def archive: (?reason: String?) -> Async::Task[self]

    #
    # Helper method to lock the thread.
    #
    # @param [String] reason The reason of locking the thread.
    #
    # @return [Async::Task<self>] The locked thread.
    def lock: (?reason: String?) -> Async::Task[self]

    #
    # Helper method to unarchive the thread.
    #
    # @param [String] reason The reason of unarchiving the thread.
    #
    # @return [Async::Task<self>] The unarchived thread.
    def unarchive: (?reason: String?) -> Async::Task[self]

    #
    # Helper method to unlock the thread.
    #
    # @param [String] reason The reason of unlocking the thread.
    #
    # @return [Async::Task<self>] The unlocked thread.
    #
    # @note This method won't unarchive the thread. Use {#unarchive} instead.
    def unlock: (?reason: String?) -> Async::Task[self]

    %a{pure}
    def parent: -> untyped

    %a{pure}
    def me: -> untyped

    %a{pure}
    def joined?: -> bool

    %a{pure}
    def guild: -> untyped

    %a{pure}
    def owner: -> untyped

    %a{pure}
    def inspect: -> String

    #
    # Add a member to the thread.
    #
    # @param [Discorb::Member, :me] member The member to add. If `:me` is given, the bot will be added.
    #
    # @return [Async::Task<void>] The task.
    def add_member: (?Discorb::Member | Symbol member) -> Async::Task[void]

    #
    # Remove a member from the thread.
    #
    # @param [Discorb::Member, :me] member The member to remove. If `:me` is given, the bot will be removed.
    #
    # @return [Async::Task<void>] The task.
    def remove_member: (?Discorb::Member | Symbol member) -> Async::Task[void]

    #
    # Fetch members in the thread.
    #
    # @return [Array<Discorb::ThreadChannel::Member>] The members in the thread.
    def fetch_members: -> ::Array[Discorb::ThreadChannel::Member]

    # @return [Discorb::Snowflake] The ID of the channel.
    # @note This ID is same as the starter message's ID
    attr_reader id: Discorb::Snowflake

    # @return [String] The name of the thread.
    attr_reader name: String

    # @return [Integer] The number of messages in the thread.
    # @note This will stop counting at 50.
    attr_reader message_count: Integer

    # @return [Integer] The number of recipients in the thread.
    # @note This will stop counting at 50.
    attr_reader member_count: Integer

    # @return [Integer] The rate limit per user (slowmode) in the thread.
    attr_reader rate_limit_per_user: Integer

    # @return [Array<Discorb::ThreadChannel::Member>] The members of the thread.
    attr_reader members: ::Array[Discorb::ThreadChannel::Member]

    # @return [Time] The time the thread was archived.
    # @return [nil] If the thread is not archived.
    attr_reader archived_timestamp: Time?

    # @return [Integer] Auto archive duration in seconds.
    attr_reader auto_archive_duration: Integer

    # @return [Boolean] Whether the thread is archived or not.
    attr_reader archived: bool

    #
    # Represents a thread in news channel(aka announcement channel).
    class News < Discorb::ThreadChannel
    end

    #
    # Represents a public thread in text channel.
    class Public < Discorb::ThreadChannel
    end

    #
    # Represents a private thread in text channel.
    class Private < Discorb::ThreadChannel
    end

    #
    # Represents a member in a thread.
    class Member < Discorb::DiscordModel
      def initialize: (
        Discorb::Client client,
        Discorb::json data,
        _ToS guild_id
      ) -> void

      %a{pure}
      def thread: -> Discorb::ThreadChannel

      %a{pure}
      def member: -> Discorb::Member

      %a{pure}
      def id: -> Discorb::Snowflake

      %a{pure}
      def user: -> Discorb::User

      %a{pure}
      def inspect: -> String

      # Returns the value of attribute joined_at.
      attr_reader joined_at: Time
    end
  end
end