abstract class PrivateParlorXT::User

Overview

A reprentation of a Telegram user.

All users require an ID, which is obtained from the Telegram user (Tourmaline::User). This ID should be unique and stored as a UserID.

Database implementations should have their own User type that inherits from this class and is modified to work with the given implementation.

Direct Known Subclasses

Defined in:

private-parlor-xt/user.cr

Constructors

Instance Method Summary

Constructor Detail

def self.new(id : UserID, username : String | Nil = nil, realname : String = "", rank : Int32 = 0, joined : Time = Time.utc, left : Time | Nil = nil, last_active : Time = Time.utc, cooldown_until : Time | Nil = nil, blacklist_reason : String | Nil = nil, warnings : Int32 = 0, warn_expiry : Time | Nil = nil, karma : Int32 = 0, hide_karma : Bool | Nil = false, debug_enabled : Bool | Nil = false, tripcode : String | Nil = nil) #

Creates an instance of User.

Arguments:

#id : unique UserID identifier for this user

#username : username of this user; can be nil

#realname : full name (first name + last name) of the user

#rank : rank of this user, corresponding to either -10 (blacklisted) or one of the configurable ranks

#joined : date and time the user joined the chat

#left : date and time the user left the chat; if nil, the user is still in the chat

#last_active : date and time the user last sent a message or used a command

#cooldown_until : date and time for until which the user cannot send messages; if nil, the user is not in cooldown

#blacklist_reason : described reason for blacklisting the user (seeBlacklistCommand) ; set to nil by default

#warnings : number of warnings the user received from WarnCommand or DeleteCommand; cooldown times are based off of this value

#warn_expiry : date and time in which one of the #warnings will be removed; if nil, user has no #warnings to remove

#karma : points the user acquired from upvotes, or lost from downvotes and warnings (see UpvoteHandler, DownvoteHandler)

#hide_karma : toggle for receiving karma notifications (see ToggleKarmaCommand); if true, the user will not receive karma notifications

#debug_enabled : toggle for debug mode (see ToggleDebugCommand); if true, the user will receive a copy of their sent message that everyone else received

#tripcode : a name and password pairing used for generating pseudononyms attached to the user's message; if nil, user has no tripcode


[View source]

Instance Method Detail

def blacklist(reason : String | Nil) : Nil #

Set the user's #rank to -10 (blacklisted), sets the #left value, and updates the #blacklist_reason


[View source]
def blacklist_reason : String | Nil #

Returns the reason why the user was blacklisted, or nil if a reason does not exist


[View source]
def blacklisted? : Bool #

Returns true if rank is -10; user is blacklisted.

Returns false otherwise.


[View source]
def can_chat?(limit : Time::Span) : Bool #

Returns true if user is joined, not in cooldown, not blacklisted, and not limited; user can chat

Returns false otherwise.


[View source]
def can_chat? : Bool #

Returns true if user is joined, not in cooldown, and not blacklisted; user can chat

Returns false otherwise.


[View source]
def can_use_command? : Bool #

Returns true if user is joined and not blacklisted; user can use commands

Returns false otherwise.


[View source]
def cooldown(base : Int32) : Time::Span #

Gives the user an exponentially increasing cooldown from the given base value and current number of #warnings


[View source]
def cooldown(time : Time::Span) : Time::Span #

Gives the user a cooldown based on the given Time::Span


[View source]
def cooldown_until : Time | Nil #

Returns the Time until which the user is in cooldown, or nil if the user is not cooldowned


[View source]
def debug_enabled : Bool | Nil #

Returns true if the suer has debug mode enabled, false otherwise


[View source]
def decrement_karma(amount : Int32 = 1) : Nil #

Decrement the user's #karma by a given amount (1 by default) On arithmetic overflow, sets user's #karma to the minimum Int32 value


[View source]
def formatted_name : String #

Get the formatted name of the user. If the user has a #username, returns it with the '@' prepended to it Otherwise, returns the #realname


[View source]
def hide_karma : Bool | Nil #

Returns true if the user has karma notifications disabled, false otherwise


[View source]
def id : UserID #

Returns the user's ID


[View source]
def increment_karma(amount : Int32 = 1) : Nil #

Increment the user's #karma by a given amount (1 by default) On arithmetic overflow, sets user's #karma to the maximum Int32 value


[View source]
def joined : Time #

Returns the Time the user joined the chat


[View source]
def karma : Int32 #

Returns the user's current amount of karma


[View source]
def last_active : Time #

Returns the Time the user was last active (i.e., the last time a message was sent or a command was used)


[View source]
def left : Time | Nil #

Returns the Time the user left the chat, or nil if the user has not left


[View source]
def left? : Bool #

Returns true if left is not nil; user has left the chat.

Returns false otherwise.


[View source]
def obfuscated_id : String #

Generate an obfuscated ID for the user, used for log messages and commands like InfoCommand


[View source]
def obfuscated_karma : Int32 #

Get the user's obfuscated #karma


[View source]
def rank : Int32 #

Returns the user's current rank value


[View source]
def realname : String #

Returns the user's full name


[View source]
def rejoin : Nil #

Set #left to nil, meaning that the User has joined the chat.


[View source]
def remove_cooldown(override : Bool = false) : Bool #

Removes a cooldown from a user if it has expired.

Returns true if the cooldown can be expired, false otherwise


[View source]
def remove_warning(amount : Int32, warn_lifespan : Time::Span) : Nil #

Removes the given amount of #warnings from a user

If the user still has #warnings after the removal, reset the #warn_expiry to a later time based on warn_lifespan


[View source]
def set_active : Nil #

Set #last_active to the current time


[View source]
def set_left : Nil #

Set #left to the current time


[View source]
def set_rank(rank : Int32) : Nil #

Set #rank to the given value


[View source]
def set_tripcode(tripcode : String) : Nil #

Set #tripcode to the given value


[View source]
def to_a : Array(UserID | String | Int32 | Time | Bool | Nil) #

Returns an array with all the values in User. Intended for database query arguments.


[View source]
def toggle_debug : Nil #

Switches user's #debug_enabled toggle


[View source]
def toggle_karma : Nil #

Switches user's #hide_karma notifications toggle


[View source]
def tripcode : String | Nil #

Returns a String containing the user's tripcode name and password for generating tripcodes, or nil if the user has no tripcode set


[View source]
def update_names(username : String | Nil, fullname : String) : Nil #

Sets user's #username and #realname to the given values


[View source]
def username : String | Nil #

Returns the user's unformatted username, or nil if it does not exist


[View source]
def warn(lifespan : Int32) : Nil #

Increments the user's #warnings and sets the #warn_expiry to the current time plus the lifespan of a warning


[View source]
def warn_expiry : Time | Nil #

Returns the Time when one of the #warnings will expire, or nil if such a time does not exit


[View source]
def warnings : Int32 #

Returns the number of warnings the user has


[View source]