diff --git a/Sources/SwiftChatSE/ChatListener.swift b/Sources/SwiftChatSE/ChatListener.swift index 2667ee7..f2c91d7 100644 --- a/Sources/SwiftChatSE/ChatListener.swift +++ b/Sources/SwiftChatSE/ChatListener.swift @@ -38,15 +38,19 @@ open class ChatListener { shutdownHandler = handler } + ///Tells the bot whether to reboot, shutdown or update. public enum StopReason { - case halt - case reboot + case halt ///Tells the bot to shutdown + case reboot ///Tells the bot to reboot + ///Tells the bot to update, that is getting the latest code from it's Github repository. case update } let commandQueue = DispatchQueue(label: "Command Queue", attributes: DispatchQueue.Attributes.concurrent) - + + + ///The commands the bot is currently running. open var runningCommands = [Command]() diff --git a/Sources/SwiftChatSE/ChatRoom.swift b/Sources/SwiftChatSE/ChatRoom.swift index 14251d3..62edbc2 100644 --- a/Sources/SwiftChatSE/ChatRoom.swift +++ b/Sources/SwiftChatSE/ChatRoom.swift @@ -16,39 +16,62 @@ open class ChatRoom: NSObject { ///A type of event from the chat room. public enum ChatEvent: Int { + ///Caused when a message is posted in the chat room case messagePosted = 1 - case messageEdited = 2 + ///Caused when a message is edited in the chat room + case messageEdited = 2 + ///Caused when a user entered the chat room case userEntered = 3 + ///Caused when a user leaves the chat room case userLeft = 4 + ///Caused when the name of the room is changed case roomNameChanged = 5 + ///Caused when a message is stsrred in the chat room case messageStarred = 6 case debugMessage = 7 + ///Caused when a user is mentioned in the chat room case userMentioned = 8 + ///Caused when a message is flagged in the chat room case messageFlagged = 9 + ///Caused when a message is deleted in the chat room case messageDeleted = 10 + ///Caused when a file is uploaded in the chat room case fileAdded = 11 + ///Caused when a message is mod flagged in the chat room case moderatorFlag = 12 case userSettingsChanged = 13 case globalNotification = 14 case accessLevelChanged = 15 case userNotification = 16 + ///Caused when a user is invited to a chat room case invitation = 17 + ///Caused when a message is replied to in a chat room case messageReply = 18 + ///Caused when a Room Owner moves a message to another room case messageMovedOut = 19 + ///Caused when a Room Owner moves a message to the room case messageMovedIn = 20 + ///Caused when the room is placed in timeout case timeBreak = 21 case feedTicker = 22 + ///Caused when a user is suspended case userSuspended = 29 + ///Caused when a user is merged case userMerged = 30 + ///Caused when a user's username has changed case usernameChanged = 34 }; - + ///The host the bot is running on. public enum Host: Int { + ///Used when the bot is running on 'stackoverflow.com' case stackOverflow + ///Used when the bot is running on 'stackexchange.com' case stackExchange + ///Used when the bot is running on 'meta.stackexchange.com' case metaStackExchange + ///Returns the domain for the specified host public var domain: String { switch self { case .stackOverflow: @@ -60,14 +83,17 @@ open class ChatRoom: NSObject { } } + ///Returns the chat domain for the specified host public var chatDomain: String { return "chat." + domain } + ///Returns the domain URL for the host public var url: URL { return URL(string: "https://" + domain)! } + ///Returns the URL for the chat host public var chatHostURL: URL { return URL(string: "https://" + chatDomain)! } @@ -504,12 +530,12 @@ open class ChatRoom: NSObject { } } + ///The errors which can be caused while the bot joins the room. public enum RoomJoinError: Error { + ///When the retrieval of information for a room failed. case roomInfoRetrievalFailed } - - fileprivate func connectWS() throws { //get the timestamp guard let time = (try client.parseJSON(client.post("https://\(host.chatDomain)/chats/\(roomID)/events", [ @@ -565,10 +591,11 @@ open class ChatRoom: NSObject { try ws.connect() } - - + ///An error which happened while the bot was processing a chat event. public enum EventError: Error { + ///This is caused when the library cannot parse the specified json. case jsonParsingFailed(json: String) + ///This is caused when the chat room event type is invalid. case invalidEventType(type: Int) } diff --git a/Sources/SwiftChatSE/ChatUser.swift b/Sources/SwiftChatSE/ChatUser.swift index 357528f..2574be6 100644 --- a/Sources/SwiftChatSE/ChatUser.swift +++ b/Sources/SwiftChatSE/ChatUser.swift @@ -159,8 +159,7 @@ open class ChatUser: CustomStringConvertible { ///The room this user is from. open let room: ChatRoom - - + ///Initializes a chat user public init(room: ChatRoom, id: Int, name: String? = nil) { self.room = room self.id = id diff --git a/Sources/SwiftChatSE/Client.swift b/Sources/SwiftChatSE/Client.swift index 7b91173..5d86984 100644 --- a/Sources/SwiftChatSE/Client.swift +++ b/Sources/SwiftChatSE/Client.swift @@ -55,14 +55,17 @@ open class Client: NSObject, URLSessionDataDelegate { delegate: self, delegateQueue: delegateQueue ) } + ///Pretty self explanatory open var cookies = [HTTPCookie]() private let queue = DispatchQueue(label: "Client queue") + ///Indicates whether the client is logged in or not. open var loggedIn = false private var configuration: URLSessionConfiguration private var delegateQueue: OperationQueue + ///Errors which can happen while making a request public enum RequestError: Error { case invalidURL(url: String) case notUTF8 @@ -70,12 +73,9 @@ open class Client: NSObject, URLSessionDataDelegate { case timeout } + ///Indicates the duration of a timeout open var timeoutDuration: TimeInterval = 30 - - - - //MARK: - Private variables private class HTTPTask { var task: URLSessionTask @@ -468,13 +468,13 @@ open class Client: NSObject, URLSessionDataDelegate { ]*/ } - - - - + ///Errors which can occur while logging in. public enum LoginError: Error { + ///Occurs when the client is already logged in. case alreadyLoggedIn + ///Occurs when the data to login is not found. case loginDataNotFound + ///Occurs when a login fails. case loginFailed(message: String) } diff --git a/Sources/SwiftChatSE/Command.swift b/Sources/SwiftChatSE/Command.swift index ed2c730..9da505a 100644 --- a/Sources/SwiftChatSE/Command.swift +++ b/Sources/SwiftChatSE/Command.swift @@ -14,6 +14,7 @@ open class Command { fatalError("usage() must be overriden") } + ///Returns a ChatUser's privileges. open class func privileges() -> ChatUser.Privileges { return [] } @@ -25,6 +26,7 @@ open class Command { ///Whether the command has completed execution. Will be set to true automatically by ChatListener. open internal(set) var finished = false + ///Arguments passed to the command. open let arguments: [String] ///Which usage of the command was run. Useful for implementing @@ -37,15 +39,17 @@ open class Command { message.room.postReply(reply, to: message) } + ///Posts a message. open func post(_ message: String) { self.message.room.postMessage(message) } - + ///Runs the command. open func run() throws { fatalError("run() must be overridden") } + ///Initializes a Command. public required init(listener: ChatListener, message: ChatMessage, arguments: [String], usageIndex: Int = 0) { self.listener = listener self.message = message diff --git a/Sources/SwiftChatSE/Levenshtein.swift b/Sources/SwiftChatSE/Levenshtein.swift index 212a6f4..b8d0c7e 100644 --- a/Sources/SwiftChatSE/Levenshtein.swift +++ b/Sources/SwiftChatSE/Levenshtein.swift @@ -41,6 +41,7 @@ public final class Levenshtein { } } + ///Calclates and returns the levenshtein distance between two strings. public class func distanceBetween(_ aStr: String, and bStr: String) -> Int { let a = Array(aStr.utf16) let b = Array(bStr.utf16) diff --git a/Sources/SwiftChatSE/WebSocket.swift b/Sources/SwiftChatSE/WebSocket.swift index 7b56de2..e56c18a 100644 --- a/Sources/SwiftChatSE/WebSocket.swift +++ b/Sources/SwiftChatSE/WebSocket.swift @@ -146,6 +146,7 @@ fileprivate func wsLog(level: Int32, buf: UnsafePointer?) { } } +///Handles all the websocket connections. public class WebSocket { public static var debugLoggingEnabled = false diff --git a/docs/CNAME b/docs/CNAME new file mode 100644 index 0000000..17444d8 --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +swiftchatse.sobotics.org \ No newline at end of file diff --git a/docs/Classes.html b/docs/Classes.html new file mode 100644 index 0000000..c54a9ad --- /dev/null +++ b/docs/Classes.html @@ -0,0 +1,609 @@ + + + + Classes Reference + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Classes

+

The following classes are available globally.

+ +
+
+
+
+ + + +

TODO:

+
+
+
    +
  • +
    + + + + ChatListener + +
    +
    +
    +
    +
    +
    +

    A ChatListener parses commands from the chat room.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class ChatListener
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + ChatRoom + +
    +
    +
    +
    +
    +
    +

    A ChatRoom represents a Stack Exchange chat room.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class ChatRoom: NSObject
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + ChatUser + +
    +
    +
    +
    +
    +
    +

    A ChatUser represents a user on Stack Exchange chat.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class ChatUser: CustomStringConvertible
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + Client + +
    +
    +
    +
    +
    +
    +

    A Client handles HTTP requests, cookie management, and logging in to Stack Exchange chat.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class Client: NSObject, URLSessionDataDelegate
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
    +
  • +
    + + + + WebSocket + +
    +
    +
    +
    +
    +
    +

    Handles all the websocket connections.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/ChatListener.html b/docs/Classes/ChatListener.html new file mode 100644 index 0000000..09dfd20 --- /dev/null +++ b/docs/Classes/ChatListener.html @@ -0,0 +1,565 @@ + + + + ChatListener Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

ChatListener

+
+
+
open class ChatListener
+ +
+
+

A ChatListener parses commands from the chat room.

+ +
+
+
+
    +
  • +
    + + + + commands + +
    +
    +
    +
    +
    +
    +

    The commands recognized by this ChatListener.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let commands: [Command.Type]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + info + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class ChatListener
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of the bot. A message must start with this name to be recognized as a command.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var name = "@FireAlarm"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minNameCharacters + +
    +
    +
    +
    +
    +
    +

    The number of characters of the name that must be included.

    + +

    For example, if name is @FireAlarm and minNameCharacters is 4, +@FireAlarm, @Fire, and @Fir will all be recognized, but +@FirTree, @Fi, and @Kyll will not.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var minNameCharacters = 4
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shutdownHandler + +
    +
    +
    +
    +
    +
    +

    A closure to run when the bot shuts down.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var shutdownHandler: (StopReason) -> () = {reason in}
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onShutdown(_:) + +
    +
    +
    +
    +
    +
    +

    Runs a closure on shutdown.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func onShutdown(_ handler: @escaping (StopReason) -> ())
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + StopReason + +
    +
    +
    +
    +
    +
    +

    Tells the bot whether to reboot, shutdown or update.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum StopReason
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + runningCommands + +
    +
    +
    +
    +
    +
    +

    The commands the bot is currently running.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var runningCommands = [Command]()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Process a ChatMessage in the specified room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func processMessage(_ room: ChatRoom, message: ChatMessage, isEdit: Bool)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stop(_:) + +
    +
    +
    +
    +
    +
    +

    Waits for running commands to complete and calls shutdownHandler.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func stop(_ reason: StopReason)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + reason + + +
    +

    The reason for the shutdown.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(commands:) + +
    +
    +
    +
    +
    +
    +

    Initializes a ChatListener.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(commands: [Command.Type])
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + commands + + +
    +

    The commands to listen for.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/ChatListener/StopReason.html b/docs/Classes/ChatListener/StopReason.html new file mode 100644 index 0000000..07b3a87 --- /dev/null +++ b/docs/Classes/ChatListener/StopReason.html @@ -0,0 +1,315 @@ + + + + StopReason Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

StopReason

+
+
+
public enum StopReason
+ +
+
+

Tells the bot whether to reboot, shutdown or update.

+ +
+
+
+
    +
  • +
    + + + + halt + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum StopReason
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + reboot + +
    +
    +
    +
    +
    +
    +

    Tells the bot to shutdown

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case reboot ///Tells the bot to reboot
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + update + +
    +
    +
    +
    +
    +
    +

    Tells the bot to reboot + Tells the bot to update, that is getting the latest code from it’s Github repository.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case update
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/ChatRoom.html b/docs/Classes/ChatRoom.html new file mode 100644 index 0000000..3320a0f --- /dev/null +++ b/docs/Classes/ChatRoom.html @@ -0,0 +1,999 @@ + + + + ChatRoom Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

ChatRoom

+
+
+
open class ChatRoom: NSObject
+ +
+
+

A ChatRoom represents a Stack Exchange chat room.

+ +
+
+
+ +
    +
  • +
    + + + + ChatEvent + +
    +
    +
    +
    +
    +
    +

    A type of event from the chat room.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Host + +
    +
    +
    +
    +
    +
    +

    The host the bot is running on.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Host: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + client + +
    +
    +
    +
    +
    +
    +

    The Client to use.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let client: Client
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + roomID + +
    +
    +
    +
    +
    +
    +

    The ID of this room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let roomID: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + host + +
    +
    +
    +
    +
    +
    +

    The Host of this room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let host: Host
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + userDB + +
    +
    +
    +
    +
    +
    +

    The list of known users.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var userDB = [ChatUser]()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fkey + +
    +
    +
    +
    +
    +
    +

    The fkey used to authorize actions in chat.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var fkey: String!
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + messageHandler + +
    +
    +
    +
    +
    +
    +

    The closure to run when a message is posted or edited.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var messageHandler: (ChatMessage, Bool) -> () = {message, isEdit in}
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onMessage(_:) + +
    +
    +
    +
    +
    +
    +

    Runs a closure when a message is posted or edited.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func onMessage(_ handler: @escaping (ChatMessage, Bool) -> ())
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inRoom + +
    +
    +
    +
    +
    +
    +

    Whether the bot is currently in the chat room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open private(set) var inRoom = false
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + messageQueue + +
    +
    +
    +
    +
    +
    +

    Messages that are waiting to be posted & their completion handlers.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var messageQueue = [(String, ((Int?) -> Void)?)]()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + info + +
    +
    +
    +
    +
    +
    +

    Custom per-room persistent storage. Must be serializable by JSONSerialization!

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var info: [String:Any] = [:]
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + + userWithID(_:) + +
    +
    +
    +
    +
    +
    +

    Looks up a user by ID. If the user is not in the database, they are added.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func userWithID(_ id: Int) -> ChatUser
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + userNamed(_:) + +
    +
    +
    +
    +
    +
    +

    Looks up a user by name. The user must already exist in the database!

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func userNamed(_ name: String) -> [ChatUser]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + loadUserDB(filename:) + +
    +
    +
    +
    +
    +
    +

    Loads the user database from disk.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func loadUserDB(filename: String? = nil) throws
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + filename + + +
    +

    The filename to load the user databse from. +The default value is users_roomID_host.json, for example users_11347_stackoverflow.com.json for SOBotics.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + saveUserDB(filename:) + +
    +
    +
    +
    +
    +
    +

    Saves the user database to disk.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func saveUserDB(filename: String? = nil) throws
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + filename + + +
    +

    The filename to save the user databse to. +The default value is users_roomID_host.json, for example users_11347_stackoverflow.com.json for SOBotics.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a ChatRoom.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(client: Client, host: Host, roomID: Int)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + client + + +
    +

    The Client to use.

    +
    +
    + + roomID + + +
    +

    The ID of the chat room.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Posts a message to the ChatRoom.

    + +
      +
    • paramter message: The content of the message to post, in Markdown.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func postMessage(_ message: String, completion: ((Int?) -> Void)? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + completion + + +
    +

    The completion handler to call when the message is posted. +The message ID will be passed to the completion handler.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Replies to a ChatMessage.

    + +
      +
    • paramter reply: The content of the message to post, in Markdown.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func postReply(_ reply: String, to: ChatMessage, completion: ((Int?) -> Void)? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + to + + +
    +

    The ChatMessage to reply to.

    +
    +
    + + completion + + +
    +

    The completion handler to call when the message is posted. +The message ID will be passed to the completion handler.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + join() + +
    +
    +
    +
    +
    +
    +

    Joins the chat room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func join() throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + leave() + +
    +
    +
    +
    +
    +
    +

    Leaves the chat room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func leave()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + RoomJoinError + +
    +
    +
    +
    +
    +
    +

    The errors which can be caused while the bot joins the room.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RoomJoinError: Error
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EventError + +
    +
    +
    +
    +
    +
    +

    An error which happened while the bot was processing a chat event.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum EventError: Error
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/ChatRoom/ChatEvent.html b/docs/Classes/ChatRoom/ChatEvent.html new file mode 100644 index 0000000..c3e25d5 --- /dev/null +++ b/docs/Classes/ChatRoom/ChatEvent.html @@ -0,0 +1,996 @@ + + + + ChatEvent Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

ChatEvent

+
+
+
public enum ChatEvent: Int
+ +
+
+

A type of event from the chat room.

+ +
+
+
+
    +
  • +
    + + + + messagePosted + +
    +
    +
    +
    +
    +
    +

    Caused when a message is posted in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messagePosted = 1
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageEdited + +
    +
    +
    +
    +
    +
    +

    Caused when a message is edited in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageEdited = 2
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userEntered + +
    +
    +
    +
    +
    +
    +

    Caused when a user entered the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case userEntered = 3
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userLeft + +
    +
    +
    +
    +
    +
    +

    Caused when a user leaves the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case userLeft = 4
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + roomNameChanged + +
    +
    +
    +
    +
    +
    +

    Caused when the name of the room is changed

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case roomNameChanged = 5
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageStarred + +
    +
    +
    +
    +
    +
    +

    Caused when a message is stsrred in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageStarred = 6
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + debugMessage + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userMentioned + +
    +
    +
    +
    +
    +
    +

    Caused when a user is mentioned in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case userMentioned = 8
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageFlagged + +
    +
    +
    +
    +
    +
    +

    Caused when a message is flagged in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageFlagged = 9
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageDeleted + +
    +
    +
    +
    +
    +
    +

    Caused when a message is deleted in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageDeleted = 10
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + fileAdded + +
    +
    +
    +
    +
    +
    +

    Caused when a file is uploaded in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fileAdded = 11
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + moderatorFlag + +
    +
    +
    +
    +
    +
    +

    Caused when a message is mod flagged in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case moderatorFlag = 12
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userSettingsChanged + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + globalNotification + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + accessLevelChanged + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userNotification + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + invitation + +
    +
    +
    +
    +
    +
    +

    Caused when a user is invited to a chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case invitation = 17
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageReply + +
    +
    +
    +
    +
    +
    +

    Caused when a message is replied to in a chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageReply = 18
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageMovedOut + +
    +
    +
    +
    +
    +
    +

    Caused when a Room Owner moves a message to another room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageMovedOut = 19
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageMovedIn + +
    +
    +
    +
    +
    +
    +

    Caused when a Room Owner moves a message to the room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageMovedIn = 20
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + timeBreak + +
    +
    +
    +
    +
    +
    +

    Caused when the room is placed in timeout

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case timeBreak = 21
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + feedTicker + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userSuspended + +
    +
    +
    +
    +
    +
    +

    Caused when a user is suspended

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case userSuspended = 29
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userMerged + +
    +
    +
    +
    +
    +
    +

    Caused when a user is merged

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case userMerged = 30
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + usernameChanged + +
    +
    +
    +
    +
    +
    +

    Caused when a user’s username has changed

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case usernameChanged = 34
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/ChatRoom/EventError.html b/docs/Classes/ChatRoom/EventError.html new file mode 100644 index 0000000..5998ee6 --- /dev/null +++ b/docs/Classes/ChatRoom/EventError.html @@ -0,0 +1,283 @@ + + + + EventError Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

EventError

+
+
+
public enum EventError: Error
+ +
+
+

An error which happened while the bot was processing a chat event.

+ +
+
+
+
    +
  • +
    + + + + jsonParsingFailed + +
    +
    +
    +
    +
    +
    +

    This is caused when the library cannot parse the specified json.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case jsonParsingFailed(json: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + invalidEventType + +
    +
    +
    +
    +
    +
    +

    This is caused when the chat room event type is invalid.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case invalidEventType(type: Int)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/ChatRoom/Host.html b/docs/Classes/ChatRoom/Host.html new file mode 100644 index 0000000..f53a78c --- /dev/null +++ b/docs/Classes/ChatRoom/Host.html @@ -0,0 +1,426 @@ + + + + Host Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Host

+
+
+
public enum Host: Int
+ +
+
+

The host the bot is running on.

+ +
+
+
+
    +
  • +
    + + + + stackOverflow + +
    +
    +
    +
    +
    +
    +

    Used when the bot is running on ‘stackoverflow.com’

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stackOverflow
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + stackExchange + +
    +
    +
    +
    +
    +
    +

    Used when the bot is running on ‘stackexchange.com’

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stackExchange
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + metaStackExchange + +
    +
    +
    +
    +
    +
    +

    Used when the bot is running on ‘meta.stackexchange.com’

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case metaStackExchange
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + domain + +
    +
    +
    +
    +
    +
    +

    Returns the domain for the specified host

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var domain: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + chatDomain + +
    +
    +
    +
    +
    +
    +

    Returns the chat domain for the specified host

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var chatDomain: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    +

    Returns the domain URL for the host

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var url: URL
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + chatHostURL + +
    +
    +
    +
    +
    +
    +

    Returns the URL for the chat host

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var chatHostURL: URL
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/ChatRoom/RoomJoinError.html b/docs/Classes/ChatRoom/RoomJoinError.html new file mode 100644 index 0000000..51b0c0e --- /dev/null +++ b/docs/Classes/ChatRoom/RoomJoinError.html @@ -0,0 +1,252 @@ + + + + RoomJoinError Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

RoomJoinError

+
+
+
public enum RoomJoinError: Error
+ +
+
+

The errors which can be caused while the bot joins the room.

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    When the retrieval of information for a room failed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case roomInfoRetrievalFailed
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/ChatUser.html b/docs/Classes/ChatUser.html new file mode 100644 index 0000000..62f5d60 --- /dev/null +++ b/docs/Classes/ChatUser.html @@ -0,0 +1,560 @@ + + + + ChatUser Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

ChatUser

+
+
+
open class ChatUser: CustomStringConvertible
+ +
+
+

A ChatUser represents a user on Stack Exchange chat.

+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    The user ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let id: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + info + +
    +
    +
    +
    +
    +
    +

    Custom per-user persistent storage. Must be serializable by JSONSerialization!

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var info: [String:Any] = [:]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Privileges + +
    +
    +
    +
    +
    +
    +

    Privileges of a ChatUser. Privileges can be added by extending this struct and adding static properties.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Privileges: OptionSet
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of this user.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var name: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isMod + +
    +
    +
    +
    +
    +
    +

    Whether this user is a ♦ moderator.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var isMod: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isRO + +
    +
    +
    +
    +
    +
    +

    Whether this user is an owner of the room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var isRO: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    +

    Whether this user is an owner of the room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var description: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privileges + +
    +
    +
    +
    +
    +
    +

    The privileges this user has.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var privileges = Privileges()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + room + +
    +
    +
    +
    +
    +
    +

    The room this user is from.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let room: ChatRoom
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(room:id:name:) + +
    +
    +
    +
    +
    +
    +

    Initializes a chat user

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(room: ChatRoom, id: Int, name: String? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + has(privileges:) + +
    +
    +
    +
    +
    +
    +

    Whether the user has the specified privileges.

    +
    +

    Note

    + Room owners, moderators, and the Console user implicitly have all privileges. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func has(privileges required: Privileges) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + missing(from:) + +
    +
    +
    +
    +
    +
    +

    Returns the specified privilege that this user is missing.

    +
    +

    Note

    + Room owners, moderators, and the Console user implicitly have all privileges. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func missing(from required: Privileges) -> Privileges
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/ChatUser/Privileges.html b/docs/Classes/ChatUser/Privileges.html new file mode 100644 index 0000000..46b9c59 --- /dev/null +++ b/docs/Classes/ChatUser/Privileges.html @@ -0,0 +1,433 @@ + + + + Privileges Struct Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Privileges

+
+
+
public struct Privileges: OptionSet
+ +
+
+

Privileges of a ChatUser. Privileges can be added by extending this struct and adding static properties.

+ +
+
+
+
    +
  • +
    + + + + rawValue + +
    +
    +
    +
    +
    +
    +

    Privileges of a ChatUser. Privileges can be added by extending this struct and adding static properties.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let rawValue: UInt
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(rawValue:) + +
    +
    +
    +
    +
    +
    +

    Privileges of a ChatUser. Privileges can be added by extending this struct and adding static properties.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(rawValue: Privileges.RawValue)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + rawValue + + +
    + +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + owner + +
    +
    +
    +
    +
    +
    +

    Owners of the chat bot.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let owner = Privileges(rawValue: 1 << 0)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + names + +
    +
    +
    +
    +
    +
    +

    The names of these privileges.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var names: [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + add(name:for:) + +
    +
    +
    +
    +
    +
    +

    Registers a name for a privilege.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func add(name: String, for privilege: Privileges)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name(of:) + +
    +
    +
    +
    +
    +
    +

    Returns the name of a privilege.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func name(of privilege: Privileges) -> String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privilegeNames + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Privileges: OptionSet
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/Client.html b/docs/Classes/Client.html new file mode 100644 index 0000000..6f09f15 --- /dev/null +++ b/docs/Classes/Client.html @@ -0,0 +1,1209 @@ + + + + Client Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Client

+
+
+
open class Client: NSObject, URLSessionDataDelegate
+ +
+
+

A Client handles HTTP requests, cookie management, and logging in to Stack Exchange chat.

+ +
+
+
+ +
    +
  • +
    + + + + session + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class Client: NSObject, URLSessionDataDelegate
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + cookies + +
    +
    +
    +
    +
    +
    +

    Pretty self explanatory

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var cookies = [HTTPCookie]()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + loggedIn + +
    +
    +
    +
    +
    +
    +

    Indicates whether the client is logged in or not.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var loggedIn = false
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + RequestError + +
    +
    +
    +
    +
    +
    +

    Errors which can happen while making a request

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RequestError: Error
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + timeoutDuration + +
    +
    +
    +
    +
    +
    +

    Indicates the duration of a timeout

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var timeoutDuration: TimeInterval = 30
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Adds cookies.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func addCookies(_ newCookies: [HTTPCookie], forHost host: String)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + newCookies + + +
    +

    The cookies to add.

    +
    +
    + + host + + +
    +

    The host which set the cookies..

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Checks whether a cookie matches a domain.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func cookieHost(_ host: String, matchesDomain domain: String) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + host + + +
    +

    The host of the cookie.

    +
    +
    + + domain + + +
    +

    The domain.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns the cookie headers for the specified URL.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func cookieHeaders(forURL url: URL) -> [String:String]
    + +
    +
    +
    +
    +
  • +
+
+
+ + +
+
+ +
    +
  • +
    + + + + performRequest(_:) + +
    +
    +
    +
    +
    +
    +

    Performs an URLRequest.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func performRequest(_ request: URLRequest) throws -> (Data, HTTPURLResponse)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + request + + +
    +

    The request to perform.

    +
    +
    +
    +
    +

    Return Value

    +

    The Data and HTTPURLResponse returned by the request.

    +
    +
    +
    +
  • +
  • +
    + + + + get(_:) + +
    +
    +
    +
    +
    +
    +

    Performs a GET request.

    + +
      +
    • paramter url: The URL to make the request to.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func get(_ url: String) throws -> (Data, HTTPURLResponse)
    + +
    +
    +
    +

    Return Value

    +

    The Data and HTTPURLResponse returned by the request.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Performs a POST request.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func post(_ url: String, data: Data, contentType: String? = nil) throws -> (Data, HTTPURLResponse)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + url + + +
    +

    The URL to make the request to.

    +
    +
    + + data + + +
    +

    The body of the POST request.

    +
    +
    +
    +
    +

    Return Value

    +

    The Data and HTTPURLResponse returned by the request.

    +
    +
    +
    +
  • +
  • +
    + + + + post(_:_:) + +
    +
    +
    +
    +
    +
    +

    Performs a POST request.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func post(_ url: String, _ data: [String:String]) throws -> (Data, HTTPURLResponse)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + url + + +
    +

    The URL to make the request to.

    +
    +
    + + data + + +
    +

    The fields to include in the POST request.

    +
    +
    +
    +
    +

    Return Value

    +

    The Data and HTTPURLResponse returned by the request.

    +
    +
    +
    +
  • +
  • +
    + + + + performRequest(_:) + +
    +
    +
    +
    +
    +
    +

    Performs an URLRequest.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func performRequest(_ request: URLRequest) throws -> String
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + request + + +
    +

    The request to perform.

    +
    +
    +
    +
    +

    Return Value

    +

    The UTF-8 string returned by the request.

    +
    +
    +
    +
  • +
  • +
    + + + + get(_:) + +
    +
    +
    +
    +
    +
    +

    Performs a GET request.

    + +
      +
    • paramter url: The URL to make the request to.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func get(_ url: String) throws -> String
    + +
    +
    +
    +

    Return Value

    +

    The UTF-8 string returned by the request.

    +
    +
    +
    +
  • +
  • +
    + + + + post(_:_:) + +
    +
    +
    +
    +
    +
    +

    Performs a POST request.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func post(_ url: String, _ fields: [String:String]) throws -> String
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + url + + +
    +

    The URL to make the request to.

    +
    +
    + + data + + +
    +

    The fields to include in the POST request.

    +
    +
    +
    +
    +

    Return Value

    +

    The UTF-8 string returned by the request.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Performs a POST request.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func post(_ url: String, data: Data, contentType: String? = nil) throws -> String
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + url + + +
    +

    The URL to make the request to.

    +
    +
    + + data + + +
    +

    The body of the POST request.

    +
    +
    +
    +
    +

    Return Value

    +

    The UTF-8 string returned by the request.

    +
    +
    +
    +
  • +
  • +
    + + + + parseJSON(_:) + +
    +
    +
    +
    +
    +
    +

    Parses a JSON string.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func parseJSON(_ json: String) throws -> Any
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Initializes a Client.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override public init()
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + host + + +
    +

    The chat host to log in to.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + LoginError + +
    +
    +
    +
    +
    +
    +

    Errors which can occur while logging in.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LoginError: Error
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Logs in to Stack Exchange.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func login(email: String, password: String) throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/Client/LoginError.html b/docs/Classes/Client/LoginError.html new file mode 100644 index 0000000..3b13dd2 --- /dev/null +++ b/docs/Classes/Client/LoginError.html @@ -0,0 +1,314 @@ + + + + LoginError Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

LoginError

+
+
+
public enum LoginError: Error
+ +
+
+

Errors which can occur while logging in.

+ +
+
+
+
    +
  • +
    + + + + alreadyLoggedIn + +
    +
    +
    +
    +
    +
    +

    Occurs when the client is already logged in.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case alreadyLoggedIn
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + loginDataNotFound + +
    +
    +
    +
    +
    +
    +

    Occurs when the data to login is not found.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case loginDataNotFound
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + loginFailed + +
    +
    +
    +
    +
    +
    +

    Occurs when a login fails.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case loginFailed(message: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/Client/RequestError.html b/docs/Classes/Client/RequestError.html new file mode 100644 index 0000000..303afa5 --- /dev/null +++ b/docs/Classes/Client/RequestError.html @@ -0,0 +1,345 @@ + + + + RequestError Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

RequestError

+
+
+
public enum RequestError: Error
+ +
+
+

Errors which can happen while making a request

+ +
+
+
+
    +
  • +
    + + + + invalidURL + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RequestError: Error
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + notUTF8 + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RequestError: Error
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + unknownError + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RequestError: Error
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + timeout + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RequestError: Error
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/Command.html b/docs/Classes/Command.html new file mode 100644 index 0000000..418f1f4 --- /dev/null +++ b/docs/Classes/Command.html @@ -0,0 +1,509 @@ + + + + Command Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Command

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    +

    Returns an array of possible usages. * means a parameter; … means a variable number of parameters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privileges() + +
    +
    +
    +
    +
    +
    +

    Returns a ChatUser’s privileges.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class func privileges() -> ChatUser.Privileges
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + message + +
    +
    +
    +
    +
    +
    +

    The message that triggered this command.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let message: ChatMessage
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + listener + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
  • +
    + + + + finished + +
    +
    +
    +
    +
    +
    +

    Whether the command has completed execution. Will be set to true automatically by ChatListener.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open internal(set) var finished = false
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + arguments + +
    +
    +
    +
    +
    +
    +

    Arguments passed to the command.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let arguments: [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + usageIndex + +
    +
    +
    +
    +
    +
    +

    Which usage of the command was run. Useful for implementing +commands that share most of their code, like shutdown/reboot.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let usageIndex: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + reply(_:) + +
    +
    +
    +
    +
    +
    +

    Replies to the message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func reply(_ reply: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + post(_:) + +
    +
    +
    +
    +
    +
    +

    Posts a message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func post(_ message: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    +

    Runs the command.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func run() throws
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a Command.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public required init(listener: ChatListener, message: ChatMessage, arguments: [String], usageIndex: Int = 0)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/CommandCheckPrivileges.html b/docs/Classes/CommandCheckPrivileges.html new file mode 100644 index 0000000..839e1dd --- /dev/null +++ b/docs/Classes/CommandCheckPrivileges.html @@ -0,0 +1,271 @@ + + + + CommandCheckPrivileges Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandCheckPrivileges

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override public class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override public func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/CommandKill.html b/docs/Classes/CommandKill.html new file mode 100644 index 0000000..06a7be2 --- /dev/null +++ b/docs/Classes/CommandKill.html @@ -0,0 +1,297 @@ + + + + CommandKill Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandKill

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privileges() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func privileges() -> ChatUser.Privileges
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/CommandListRunning.html b/docs/Classes/CommandListRunning.html new file mode 100644 index 0000000..e82e1df --- /dev/null +++ b/docs/Classes/CommandListRunning.html @@ -0,0 +1,271 @@ + + + + CommandListRunning Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandListRunning

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/CommandPrivilege.html b/docs/Classes/CommandPrivilege.html new file mode 100644 index 0000000..8975852 --- /dev/null +++ b/docs/Classes/CommandPrivilege.html @@ -0,0 +1,297 @@ + + + + CommandPrivilege Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandPrivilege

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privileges() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func privileges() -> ChatUser.Privileges
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/CommandSay.html b/docs/Classes/CommandSay.html new file mode 100644 index 0000000..c368cde --- /dev/null +++ b/docs/Classes/CommandSay.html @@ -0,0 +1,271 @@ + + + + CommandSay Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandSay

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/CommandStop.html b/docs/Classes/CommandStop.html new file mode 100644 index 0000000..bc420b6 --- /dev/null +++ b/docs/Classes/CommandStop.html @@ -0,0 +1,297 @@ + + + + CommandStop Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandStop

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privileges() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func privileges() -> ChatUser.Privileges
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/CommandUnprivilege.html b/docs/Classes/CommandUnprivilege.html new file mode 100644 index 0000000..cb75d93 --- /dev/null +++ b/docs/Classes/CommandUnprivilege.html @@ -0,0 +1,297 @@ + + + + CommandUnprivilege Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandUnprivilege

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privileges() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func privileges() -> ChatUser.Privileges
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/Levenshtein.html b/docs/Classes/Levenshtein.html new file mode 100644 index 0000000..1b18ddb --- /dev/null +++ b/docs/Classes/Levenshtein.html @@ -0,0 +1,256 @@ + + + + Levenshtein Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Levenshtein

+
+
+
public final class Levenshtein
+ +
+
+

Levenshtein edit distance calculator + From https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#Swift

+ +

Inspired by https://gist.github.com/bgreenlee/52d93a1d8fa1b8c1f38b + Improved with http://stackoverflow.com/questions/26990394/slow-swift-arrays-and-strings-performance

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Calclates and returns the levenshtein distance between two strings.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class func distanceBetween(_ aStr: String, and bStr: String) -> Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/WebSocket.html b/docs/Classes/WebSocket.html new file mode 100644 index 0000000..2f9a6ba --- /dev/null +++ b/docs/Classes/WebSocket.html @@ -0,0 +1,902 @@ + + + + WebSocket Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

WebSocket

+
+
+
public class WebSocket
+ +
+
+

Handles all the websocket connections.

+ +
+
+
+
    +
  • +
    + + + + debugLoggingEnabled + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + WebSocketError + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + WebSocketState + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + origin + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + customHeaders + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + secure + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + state + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + error + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + openHandler + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textHandler + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + binaryHandler + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + errorHandler + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + closeHandler + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onOpen(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onText(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onBinary(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onError(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onClose(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + connect() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + write(_:) + +
    +
    +
    +
    +
    +
    +

    Sends a text message across the socket.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func write(_ text: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + write(_:) + +
    +
    +
    +
    +
    +
    +

    Sends a binary message across the socket.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func write(_ data: Data)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + disconnect() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/WebSocket/WebSocketError.html b/docs/Classes/WebSocket/WebSocketError.html new file mode 100644 index 0000000..ba2aa19 --- /dev/null +++ b/docs/Classes/WebSocket/WebSocketError.html @@ -0,0 +1,353 @@ + + + + WebSocketError Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

WebSocketError

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + notURL + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + invalidURL + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+ +
+
+
    +
  • +
    + + + + lwsError + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + textNotUTF8 + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + writeFailed + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/WebSocket/WebSocketState.html b/docs/Classes/WebSocket/WebSocketState.html new file mode 100644 index 0000000..efabb16 --- /dev/null +++ b/docs/Classes/WebSocket/WebSocketState.html @@ -0,0 +1,330 @@ + + + + WebSocketState Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

WebSocketState

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + disconnected + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + connecting + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + connected + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + disconnecting + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + error + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Enums.html b/docs/Enums.html new file mode 100644 index 0000000..49086ac --- /dev/null +++ b/docs/Enums.html @@ -0,0 +1,238 @@ + + + + Enums Reference + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Enums

+

The following enums are available globally.

+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/Enums/FileLoadingError.html b/docs/Enums/FileLoadingError.html new file mode 100644 index 0000000..0562100 --- /dev/null +++ b/docs/Enums/FileLoadingError.html @@ -0,0 +1,238 @@ + + + + FileLoadingError Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

FileLoadingError

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + notUFT8 + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions.html b/docs/Extensions.html new file mode 100644 index 0000000..c995d08 --- /dev/null +++ b/docs/Extensions.html @@ -0,0 +1,245 @@ + + + + Extensions Reference + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+
+
    +
  • +
    + + + + String + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    struct String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/String.html b/docs/Extensions/String.html new file mode 100644 index 0000000..0a8bd61 --- /dev/null +++ b/docs/Extensions/String.html @@ -0,0 +1,253 @@ + + + + String Extension Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

String

+
+
+
struct String
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Returns a new string made by replacing in the String +all HTML character entity references with the corresponding +character.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var stringByDecodingHTMLEntities : String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Functions.html b/docs/Functions.html new file mode 100644 index 0000000..9152f48 --- /dev/null +++ b/docs/Functions.html @@ -0,0 +1,420 @@ + + + + Functions Reference + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Functions

+

The following functions are available globally.

+ +
+
+
+
    +
  • +
    + + + + errorAsNSError(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
  • +
    + + + + formatNSError(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
  • +
    + + + + handleError(_:_:) + +
    +
    +
    +
    +
    +
    +

    Logs an error.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func handleError(_ error: Error, _ context: String? = nil)
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/Global Variables.html b/docs/Global Variables.html new file mode 100644 index 0000000..d82e41a --- /dev/null +++ b/docs/Global Variables.html @@ -0,0 +1,414 @@ + + + + Global Variables Reference + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Global Variables

+

The following global variables are available globally.

+ +
+
+
+
    +
  • +
    + + + + errorRoom + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
  • +
    + + + + maxErrors + +
    +
    +
    +
    +
    +
    +

    The maximum amount of errors that can occur in a 30-second period.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var maxErrors = 2
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + afterTooManyErrors + +
    +
    +
    +
    +
    +
    +

    What to do after too many errors. Defaults to calling abort.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var afterTooManyErrors: () -> () = { abort() }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + errorsInLast30Seconds + +
    +
    +
    +
    +
    +
    +

    How many errors have occured within the last 30 seconds.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var errorsInLast30Seconds = 0
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ping + +
    +
    +
    +
    +
    +
    +

    A string that will be appended to the error message so that the bot’s author can be pinged by errors..

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ping = " (cc @<enter owner name here>)"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pingonerror + +
    +
    +
    +
    +
    +
    +

    A bool variable which will control the usage of the ping ^ variable.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var pingonerror = true
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userLocation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
  • +
    + + + + saveURL + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Structs.html b/docs/Structs.html new file mode 100644 index 0000000..36aaec6 --- /dev/null +++ b/docs/Structs.html @@ -0,0 +1,246 @@ + + + + Structs Reference + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Structs

+

The following structs are available globally.

+ +
+
+
+
    +
  • +
    + + + + ChatMessage + +
    +
    +
    +
    +
    +
    +

    A ChatMessage represents a message in Stack Exchange chat.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatMessage
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Structs/ChatMessage.html b/docs/Structs/ChatMessage.html new file mode 100644 index 0000000..daa06a0 --- /dev/null +++ b/docs/Structs/ChatMessage.html @@ -0,0 +1,414 @@ + + + + ChatMessage Struct Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

ChatMessage

+
+
+
public struct ChatMessage
+ +
+
+

A ChatMessage represents a message in Stack Exchange chat.

+ +
+
+
+
    +
  • +
    + + + + room + +
    +
    +
    +
    +
    +
    +

    The room in which this message was posted.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let room: ChatRoom
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    The user who posted this message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: ChatUser
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    The content of this message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    This message’s ID, or nil if it is not known.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + replyID + +
    +
    +
    +
    +
    +
    +

    The message that this message replied to, or nil if this message is not a reply.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let replyID: Int?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatMessage
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + reply(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatMessage
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/badge.svg b/docs/badge.svg new file mode 100644 index 0000000..6998e7b --- /dev/null +++ b/docs/badge.svg @@ -0,0 +1 @@ +documentationdocumentation66%66% \ No newline at end of file diff --git a/docs/css/highlight.css b/docs/css/highlight.css new file mode 100644 index 0000000..d0db0e1 --- /dev/null +++ b/docs/css/highlight.css @@ -0,0 +1,200 @@ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight { + /* Comment */ + /* Error */ + /* Keyword */ + /* Operator */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Deleted.Specific */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Inserted.Specific */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Literal.Number.Integer.Long */ } + .highlight .c { + color: #999988; + font-style: italic; } + .highlight .err { + color: #a61717; + background-color: #e3d2d2; } + .highlight .k { + color: #000000; + font-weight: bold; } + .highlight .o { + color: #000000; + font-weight: bold; } + .highlight .cm { + color: #999988; + font-style: italic; } + .highlight .cp { + color: #999999; + font-weight: bold; } + .highlight .c1 { + color: #999988; + font-style: italic; } + .highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + .highlight .gd { + color: #000000; + background-color: #ffdddd; } + .highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + .highlight .ge { + color: #000000; + font-style: italic; } + .highlight .gr { + color: #aa0000; } + .highlight .gh { + color: #999999; } + .highlight .gi { + color: #000000; + background-color: #ddffdd; } + .highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + .highlight .go { + color: #888888; } + .highlight .gp { + color: #555555; } + .highlight .gs { + font-weight: bold; } + .highlight .gu { + color: #aaaaaa; } + .highlight .gt { + color: #aa0000; } + .highlight .kc { + color: #000000; + font-weight: bold; } + .highlight .kd { + color: #000000; + font-weight: bold; } + .highlight .kp { + color: #000000; + font-weight: bold; } + .highlight .kr { + color: #000000; + font-weight: bold; } + .highlight .kt { + color: #445588; } + .highlight .m { + color: #009999; } + .highlight .s { + color: #d14; } + .highlight .na { + color: #008080; } + .highlight .nb { + color: #0086B3; } + .highlight .nc { + color: #445588; + font-weight: bold; } + .highlight .no { + color: #008080; } + .highlight .ni { + color: #800080; } + .highlight .ne { + color: #990000; + font-weight: bold; } + .highlight .nf { + color: #990000; } + .highlight .nn { + color: #555555; } + .highlight .nt { + color: #000080; } + .highlight .nv { + color: #008080; } + .highlight .ow { + color: #000000; + font-weight: bold; } + .highlight .w { + color: #bbbbbb; } + .highlight .mf { + color: #009999; } + .highlight .mh { + color: #009999; } + .highlight .mi { + color: #009999; } + .highlight .mo { + color: #009999; } + .highlight .sb { + color: #d14; } + .highlight .sc { + color: #d14; } + .highlight .sd { + color: #d14; } + .highlight .s2 { + color: #d14; } + .highlight .se { + color: #d14; } + .highlight .sh { + color: #d14; } + .highlight .si { + color: #d14; } + .highlight .sx { + color: #d14; } + .highlight .sr { + color: #009926; } + .highlight .s1 { + color: #d14; } + .highlight .ss { + color: #990073; } + .highlight .bp { + color: #999999; } + .highlight .vc { + color: #008080; } + .highlight .vg { + color: #008080; } + .highlight .vi { + color: #008080; } + .highlight .il { + color: #009999; } diff --git a/docs/css/jazzy.css b/docs/css/jazzy.css new file mode 100644 index 0000000..d628282 --- /dev/null +++ b/docs/css/jazzy.css @@ -0,0 +1,337 @@ +html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { + background: transparent; + border: 0; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; } + +body { + background-color: #f2f2f2; + font-family: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + -webkit-font-smoothing: subpixel-antialiased; + word-wrap: break-word; } + +h1, h2, h3 { + margin-top: 0.8em; + margin-bottom: 0.3em; + font-weight: 100; + color: black; } + +h1 { + font-size: 2.5em; } + +h2 { + font-size: 2em; + border-bottom: 1px solid #e2e2e2; } + +h4 { + font-size: 13px; + line-height: 1.5; + margin-top: 21px; } + +h5 { + font-size: 1.1em; } + +h6 { + font-size: 1.1em; + color: #777; } + +.section-name { + color: gray; + display: block; + font-family: Helvetica; + font-size: 22px; + font-weight: 100; + margin-bottom: 15px; } + +pre, code { + font: 0.95em Menlo, monospace; + color: #777; + word-wrap: normal; } + +p code, li code { + background-color: #eee; + padding: 2px 4px; + border-radius: 4px; } + +a { + color: #0088cc; + text-decoration: none; } + +ul { + padding-left: 15px; } + +li { + line-height: 1.8em; } + +img { + max-width: 100%; } + +blockquote { + margin-left: 0; + padding: 0 10px; + border-left: 4px solid #ccc; } + +.content-wrapper { + margin: 0 auto; + width: 980px; } + +header { + font-size: 0.85em; + line-height: 26px; + background-color: #414141; + position: fixed; + width: 100%; + z-index: 1; } + header img { + padding-right: 6px; + vertical-align: -4px; + height: 16px; } + header a { + color: #fff; } + header p { + float: left; + color: #999; } + header .header-right { + float: right; + margin-left: 16px; } + +#breadcrumbs { + background-color: #f2f2f2; + height: 27px; + padding-top: 17px; + position: fixed; + width: 100%; + z-index: 1; + margin-top: 26px; } + #breadcrumbs #carat { + height: 10px; + margin: 0 5px; } + +.sidebar { + background-color: #f9f9f9; + border: 1px solid #e2e2e2; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + top: 70px; + bottom: 0; + width: 230px; + word-wrap: normal; } + +.nav-groups { + list-style-type: none; + background: #fff; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #e2e2e2; + font-size: 1.1em; + font-weight: 100; + padding: 15px 0 15px 20px; } + .nav-group-name > a { + color: #333; } + +.nav-group-tasks { + margin-top: 5px; } + +.nav-group-task { + font-size: 0.9em; + list-style-type: none; + white-space: nowrap; } + .nav-group-task a { + color: #888; } + +.main-content { + background-color: #fff; + border: 1px solid #e2e2e2; + margin-left: 246px; + position: absolute; + overflow: hidden; + padding-bottom: 60px; + top: 70px; + width: 734px; } + .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { + margin-bottom: 1em; } + .main-content p { + line-height: 1.8em; } + .main-content section .section:first-child { + margin-top: 0; + padding-top: 0; } + .main-content section .task-group-section .task-group:first-of-type { + padding-top: 10px; } + .main-content section .task-group-section .task-group:first-of-type .section-name { + padding-top: 15px; } + .main-content section .heading:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.section { + padding: 0 25px; } + +.highlight { + background-color: #eee; + padding: 10px 12px; + border: 1px solid #e2e2e2; + border-radius: 4px; + overflow-x: auto; } + +.declaration .highlight { + overflow-x: initial; + padding: 0 40px 40px 0; + margin-bottom: -25px; + background-color: transparent; + border: none; } + +.section-name { + margin: 0; + margin-left: 18px; } + +.task-group-section { + padding-left: 6px; + border-top: 1px solid #e2e2e2; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .item code { + background-color: transparent; + padding: 0; } + .item .token { + padding-left: 3px; + margin-left: 15px; + font-size: 11.9px; } + .item .declaration-note { + font-size: .85em; + color: gray; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #e2e2e2; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + background: #f9f9f9; + border-left: 1px solid #e2e2e2; + border-top: 1px solid #e2e2e2; + height: 12px; + left: 21px; + top: -7px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + width: 12px; } + +.height-container { + display: none; + left: -25px; + padding: 0 25px; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #f9f9f9; + border-bottom: 1px solid #e2e2e2; + left: -25px; + position: relative; + width: 100%; + padding-top: 10px; + padding-bottom: 5px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4b8afb; } + +.aside-warning { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #e2e2e2; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +#footer { + position: absolute; + bottom: 10px; + margin-left: 25px; } + #footer p { + margin: 0; + color: #aaa; + font-size: 0.8em; } + +html.dash header, html.dash #breadcrumbs, html.dash .sidebar { + display: none; } +html.dash .main-content { + width: 980px; + margin-left: 0; + border: none; + width: 100%; + top: 0; + padding-bottom: 0; } +html.dash .height-container { + display: block; } +html.dash .item .token { + margin-left: 0; } +html.dash .content-wrapper { + width: auto; } +html.dash #footer { + position: static; } diff --git a/docs/docsets/.docset/Contents/Info.plist b/docs/docsets/.docset/Contents/Info.plist new file mode 100644 index 0000000..61863ec --- /dev/null +++ b/docs/docsets/.docset/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleIdentifier + com.jazzy. + CFBundleName + + DocSetPlatformFamily + + isDashDocset + + dashIndexFilePath + index.html + isJavaScriptEnabled + + DashDocSetFamily + dashtoc + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes.html new file mode 100644 index 0000000..c54a9ad --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes.html @@ -0,0 +1,609 @@ + + + + Classes Reference + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Classes

+

The following classes are available globally.

+ +
+
+
+
+ + + +

TODO:

+
+
+
    +
  • +
    + + + + ChatListener + +
    +
    +
    +
    +
    +
    +

    A ChatListener parses commands from the chat room.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class ChatListener
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + ChatRoom + +
    +
    +
    +
    +
    +
    +

    A ChatRoom represents a Stack Exchange chat room.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class ChatRoom: NSObject
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + ChatUser + +
    +
    +
    +
    +
    +
    +

    A ChatUser represents a user on Stack Exchange chat.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class ChatUser: CustomStringConvertible
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + Client + +
    +
    +
    +
    +
    +
    +

    A Client handles HTTP requests, cookie management, and logging in to Stack Exchange chat.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class Client: NSObject, URLSessionDataDelegate
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
    +
  • +
    + + + + WebSocket + +
    +
    +
    +
    +
    +
    +

    Handles all the websocket connections.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatListener.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatListener.html new file mode 100644 index 0000000..09dfd20 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatListener.html @@ -0,0 +1,565 @@ + + + + ChatListener Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

ChatListener

+
+
+
open class ChatListener
+ +
+
+

A ChatListener parses commands from the chat room.

+ +
+
+
+
    +
  • +
    + + + + commands + +
    +
    +
    +
    +
    +
    +

    The commands recognized by this ChatListener.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let commands: [Command.Type]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + info + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class ChatListener
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of the bot. A message must start with this name to be recognized as a command.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var name = "@FireAlarm"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + minNameCharacters + +
    +
    +
    +
    +
    +
    +

    The number of characters of the name that must be included.

    + +

    For example, if name is @FireAlarm and minNameCharacters is 4, +@FireAlarm, @Fire, and @Fir will all be recognized, but +@FirTree, @Fi, and @Kyll will not.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var minNameCharacters = 4
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + shutdownHandler + +
    +
    +
    +
    +
    +
    +

    A closure to run when the bot shuts down.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var shutdownHandler: (StopReason) -> () = {reason in}
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onShutdown(_:) + +
    +
    +
    +
    +
    +
    +

    Runs a closure on shutdown.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func onShutdown(_ handler: @escaping (StopReason) -> ())
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + StopReason + +
    +
    +
    +
    +
    +
    +

    Tells the bot whether to reboot, shutdown or update.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum StopReason
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + runningCommands + +
    +
    +
    +
    +
    +
    +

    The commands the bot is currently running.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var runningCommands = [Command]()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Process a ChatMessage in the specified room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func processMessage(_ room: ChatRoom, message: ChatMessage, isEdit: Bool)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + stop(_:) + +
    +
    +
    +
    +
    +
    +

    Waits for running commands to complete and calls shutdownHandler.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func stop(_ reason: StopReason)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + reason + + +
    +

    The reason for the shutdown.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(commands:) + +
    +
    +
    +
    +
    +
    +

    Initializes a ChatListener.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(commands: [Command.Type])
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + commands + + +
    +

    The commands to listen for.

    +
    +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatListener/StopReason.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatListener/StopReason.html new file mode 100644 index 0000000..07b3a87 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatListener/StopReason.html @@ -0,0 +1,315 @@ + + + + StopReason Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

StopReason

+
+
+
public enum StopReason
+ +
+
+

Tells the bot whether to reboot, shutdown or update.

+ +
+
+
+
    +
  • +
    + + + + halt + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum StopReason
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + reboot + +
    +
    +
    +
    +
    +
    +

    Tells the bot to shutdown

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case reboot ///Tells the bot to reboot
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + update + +
    +
    +
    +
    +
    +
    +

    Tells the bot to reboot + Tells the bot to update, that is getting the latest code from it’s Github repository.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case update
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom.html new file mode 100644 index 0000000..3320a0f --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom.html @@ -0,0 +1,999 @@ + + + + ChatRoom Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

ChatRoom

+
+
+
open class ChatRoom: NSObject
+ +
+
+

A ChatRoom represents a Stack Exchange chat room.

+ +
+
+
+ +
    +
  • +
    + + + + ChatEvent + +
    +
    +
    +
    +
    +
    +

    A type of event from the chat room.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Host + +
    +
    +
    +
    +
    +
    +

    The host the bot is running on.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Host: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + client + +
    +
    +
    +
    +
    +
    +

    The Client to use.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let client: Client
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + roomID + +
    +
    +
    +
    +
    +
    +

    The ID of this room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let roomID: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + host + +
    +
    +
    +
    +
    +
    +

    The Host of this room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let host: Host
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + userDB + +
    +
    +
    +
    +
    +
    +

    The list of known users.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var userDB = [ChatUser]()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + fkey + +
    +
    +
    +
    +
    +
    +

    The fkey used to authorize actions in chat.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var fkey: String!
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + messageHandler + +
    +
    +
    +
    +
    +
    +

    The closure to run when a message is posted or edited.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var messageHandler: (ChatMessage, Bool) -> () = {message, isEdit in}
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onMessage(_:) + +
    +
    +
    +
    +
    +
    +

    Runs a closure when a message is posted or edited.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func onMessage(_ handler: @escaping (ChatMessage, Bool) -> ())
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + inRoom + +
    +
    +
    +
    +
    +
    +

    Whether the bot is currently in the chat room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open private(set) var inRoom = false
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + messageQueue + +
    +
    +
    +
    +
    +
    +

    Messages that are waiting to be posted & their completion handlers.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var messageQueue = [(String, ((Int?) -> Void)?)]()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + info + +
    +
    +
    +
    +
    +
    +

    Custom per-room persistent storage. Must be serializable by JSONSerialization!

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var info: [String:Any] = [:]
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + + userWithID(_:) + +
    +
    +
    +
    +
    +
    +

    Looks up a user by ID. If the user is not in the database, they are added.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func userWithID(_ id: Int) -> ChatUser
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + userNamed(_:) + +
    +
    +
    +
    +
    +
    +

    Looks up a user by name. The user must already exist in the database!

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func userNamed(_ name: String) -> [ChatUser]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + loadUserDB(filename:) + +
    +
    +
    +
    +
    +
    +

    Loads the user database from disk.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func loadUserDB(filename: String? = nil) throws
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + filename + + +
    +

    The filename to load the user databse from. +The default value is users_roomID_host.json, for example users_11347_stackoverflow.com.json for SOBotics.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + saveUserDB(filename:) + +
    +
    +
    +
    +
    +
    +

    Saves the user database to disk.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func saveUserDB(filename: String? = nil) throws
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + filename + + +
    +

    The filename to save the user databse to. +The default value is users_roomID_host.json, for example users_11347_stackoverflow.com.json for SOBotics.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a ChatRoom.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(client: Client, host: Host, roomID: Int)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + client + + +
    +

    The Client to use.

    +
    +
    + + roomID + + +
    +

    The ID of the chat room.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Posts a message to the ChatRoom.

    + +
      +
    • paramter message: The content of the message to post, in Markdown.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func postMessage(_ message: String, completion: ((Int?) -> Void)? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + completion + + +
    +

    The completion handler to call when the message is posted. +The message ID will be passed to the completion handler.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Replies to a ChatMessage.

    + +
      +
    • paramter reply: The content of the message to post, in Markdown.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func postReply(_ reply: String, to: ChatMessage, completion: ((Int?) -> Void)? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + to + + +
    +

    The ChatMessage to reply to.

    +
    +
    + + completion + + +
    +

    The completion handler to call when the message is posted. +The message ID will be passed to the completion handler.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + join() + +
    +
    +
    +
    +
    +
    +

    Joins the chat room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func join() throws
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + leave() + +
    +
    +
    +
    +
    +
    +

    Leaves the chat room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func leave()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + RoomJoinError + +
    +
    +
    +
    +
    +
    +

    The errors which can be caused while the bot joins the room.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RoomJoinError: Error
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + EventError + +
    +
    +
    +
    +
    +
    +

    An error which happened while the bot was processing a chat event.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum EventError: Error
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom/ChatEvent.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom/ChatEvent.html new file mode 100644 index 0000000..c3e25d5 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom/ChatEvent.html @@ -0,0 +1,996 @@ + + + + ChatEvent Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

ChatEvent

+
+
+
public enum ChatEvent: Int
+ +
+
+

A type of event from the chat room.

+ +
+
+
+
    +
  • +
    + + + + messagePosted + +
    +
    +
    +
    +
    +
    +

    Caused when a message is posted in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messagePosted = 1
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageEdited + +
    +
    +
    +
    +
    +
    +

    Caused when a message is edited in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageEdited = 2
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userEntered + +
    +
    +
    +
    +
    +
    +

    Caused when a user entered the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case userEntered = 3
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userLeft + +
    +
    +
    +
    +
    +
    +

    Caused when a user leaves the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case userLeft = 4
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + roomNameChanged + +
    +
    +
    +
    +
    +
    +

    Caused when the name of the room is changed

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case roomNameChanged = 5
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageStarred + +
    +
    +
    +
    +
    +
    +

    Caused when a message is stsrred in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageStarred = 6
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + debugMessage + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userMentioned + +
    +
    +
    +
    +
    +
    +

    Caused when a user is mentioned in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case userMentioned = 8
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageFlagged + +
    +
    +
    +
    +
    +
    +

    Caused when a message is flagged in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageFlagged = 9
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageDeleted + +
    +
    +
    +
    +
    +
    +

    Caused when a message is deleted in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageDeleted = 10
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + fileAdded + +
    +
    +
    +
    +
    +
    +

    Caused when a file is uploaded in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case fileAdded = 11
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + moderatorFlag + +
    +
    +
    +
    +
    +
    +

    Caused when a message is mod flagged in the chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case moderatorFlag = 12
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userSettingsChanged + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + globalNotification + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + accessLevelChanged + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userNotification + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + invitation + +
    +
    +
    +
    +
    +
    +

    Caused when a user is invited to a chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case invitation = 17
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageReply + +
    +
    +
    +
    +
    +
    +

    Caused when a message is replied to in a chat room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageReply = 18
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageMovedOut + +
    +
    +
    +
    +
    +
    +

    Caused when a Room Owner moves a message to another room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageMovedOut = 19
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + messageMovedIn + +
    +
    +
    +
    +
    +
    +

    Caused when a Room Owner moves a message to the room

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case messageMovedIn = 20
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + timeBreak + +
    +
    +
    +
    +
    +
    +

    Caused when the room is placed in timeout

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case timeBreak = 21
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + feedTicker + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ChatEvent: Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userSuspended + +
    +
    +
    +
    +
    +
    +

    Caused when a user is suspended

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case userSuspended = 29
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userMerged + +
    +
    +
    +
    +
    +
    +

    Caused when a user is merged

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case userMerged = 30
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + usernameChanged + +
    +
    +
    +
    +
    +
    +

    Caused when a user’s username has changed

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case usernameChanged = 34
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom/EventError.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom/EventError.html new file mode 100644 index 0000000..5998ee6 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom/EventError.html @@ -0,0 +1,283 @@ + + + + EventError Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

EventError

+
+
+
public enum EventError: Error
+ +
+
+

An error which happened while the bot was processing a chat event.

+ +
+
+
+
    +
  • +
    + + + + jsonParsingFailed + +
    +
    +
    +
    +
    +
    +

    This is caused when the library cannot parse the specified json.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case jsonParsingFailed(json: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + invalidEventType + +
    +
    +
    +
    +
    +
    +

    This is caused when the chat room event type is invalid.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case invalidEventType(type: Int)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom/Host.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom/Host.html new file mode 100644 index 0000000..f53a78c --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom/Host.html @@ -0,0 +1,426 @@ + + + + Host Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Host

+
+
+
public enum Host: Int
+ +
+
+

The host the bot is running on.

+ +
+
+
+
    +
  • +
    + + + + stackOverflow + +
    +
    +
    +
    +
    +
    +

    Used when the bot is running on ‘stackoverflow.com’

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stackOverflow
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + stackExchange + +
    +
    +
    +
    +
    +
    +

    Used when the bot is running on ‘stackexchange.com’

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case stackExchange
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + metaStackExchange + +
    +
    +
    +
    +
    +
    +

    Used when the bot is running on ‘meta.stackexchange.com’

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case metaStackExchange
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + domain + +
    +
    +
    +
    +
    +
    +

    Returns the domain for the specified host

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var domain: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + chatDomain + +
    +
    +
    +
    +
    +
    +

    Returns the chat domain for the specified host

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var chatDomain: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    +

    Returns the domain URL for the host

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var url: URL
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + chatHostURL + +
    +
    +
    +
    +
    +
    +

    Returns the URL for the chat host

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var chatHostURL: URL
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom/RoomJoinError.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom/RoomJoinError.html new file mode 100644 index 0000000..51b0c0e --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatRoom/RoomJoinError.html @@ -0,0 +1,252 @@ + + + + RoomJoinError Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

RoomJoinError

+
+
+
public enum RoomJoinError: Error
+ +
+
+

The errors which can be caused while the bot joins the room.

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    When the retrieval of information for a room failed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case roomInfoRetrievalFailed
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatUser.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatUser.html new file mode 100644 index 0000000..62f5d60 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatUser.html @@ -0,0 +1,560 @@ + + + + ChatUser Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

ChatUser

+
+
+
open class ChatUser: CustomStringConvertible
+ +
+
+

A ChatUser represents a user on Stack Exchange chat.

+ +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    The user ID.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let id: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + info + +
    +
    +
    +
    +
    +
    +

    Custom per-user persistent storage. Must be serializable by JSONSerialization!

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var info: [String:Any] = [:]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Privileges + +
    +
    +
    +
    +
    +
    +

    Privileges of a ChatUser. Privileges can be added by extending this struct and adding static properties.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Privileges: OptionSet
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    The name of this user.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var name: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isMod + +
    +
    +
    +
    +
    +
    +

    Whether this user is a ♦ moderator.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var isMod: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + isRO + +
    +
    +
    +
    +
    +
    +

    Whether this user is an owner of the room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var isRO: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    +

    Whether this user is an owner of the room.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var description: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privileges + +
    +
    +
    +
    +
    +
    +

    The privileges this user has.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var privileges = Privileges()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + room + +
    +
    +
    +
    +
    +
    +

    The room this user is from.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let room: ChatRoom
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(room:id:name:) + +
    +
    +
    +
    +
    +
    +

    Initializes a chat user

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(room: ChatRoom, id: Int, name: String? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + has(privileges:) + +
    +
    +
    +
    +
    +
    +

    Whether the user has the specified privileges.

    +
    +

    Note

    + Room owners, moderators, and the Console user implicitly have all privileges. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func has(privileges required: Privileges) -> Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + missing(from:) + +
    +
    +
    +
    +
    +
    +

    Returns the specified privilege that this user is missing.

    +
    +

    Note

    + Room owners, moderators, and the Console user implicitly have all privileges. + +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func missing(from required: Privileges) -> Privileges
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatUser/Privileges.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatUser/Privileges.html new file mode 100644 index 0000000..46b9c59 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/ChatUser/Privileges.html @@ -0,0 +1,433 @@ + + + + Privileges Struct Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Privileges

+
+
+
public struct Privileges: OptionSet
+ +
+
+

Privileges of a ChatUser. Privileges can be added by extending this struct and adding static properties.

+ +
+
+
+
    +
  • +
    + + + + rawValue + +
    +
    +
    +
    +
    +
    +

    Privileges of a ChatUser. Privileges can be added by extending this struct and adding static properties.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let rawValue: UInt
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(rawValue:) + +
    +
    +
    +
    +
    +
    +

    Privileges of a ChatUser. Privileges can be added by extending this struct and adding static properties.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(rawValue: Privileges.RawValue)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + rawValue + + +
    + +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + owner + +
    +
    +
    +
    +
    +
    +

    Owners of the chat bot.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let owner = Privileges(rawValue: 1 << 0)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + names + +
    +
    +
    +
    +
    +
    +

    The names of these privileges.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var names: [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + add(name:for:) + +
    +
    +
    +
    +
    +
    +

    Registers a name for a privilege.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func add(name: String, for privilege: Privileges)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + name(of:) + +
    +
    +
    +
    +
    +
    +

    Returns the name of a privilege.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func name(of privilege: Privileges) -> String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privilegeNames + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct Privileges: OptionSet
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/Client.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/Client.html new file mode 100644 index 0000000..6f09f15 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/Client.html @@ -0,0 +1,1209 @@ + + + + Client Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Client

+
+
+
open class Client: NSObject, URLSessionDataDelegate
+ +
+
+

A Client handles HTTP requests, cookie management, and logging in to Stack Exchange chat.

+ +
+
+
+ +
    +
  • +
    + + + + session + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class Client: NSObject, URLSessionDataDelegate
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + cookies + +
    +
    +
    +
    +
    +
    +

    Pretty self explanatory

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var cookies = [HTTPCookie]()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + loggedIn + +
    +
    +
    +
    +
    +
    +

    Indicates whether the client is logged in or not.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var loggedIn = false
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + RequestError + +
    +
    +
    +
    +
    +
    +

    Errors which can happen while making a request

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RequestError: Error
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + timeoutDuration + +
    +
    +
    +
    +
    +
    +

    Indicates the duration of a timeout

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var timeoutDuration: TimeInterval = 30
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Adds cookies.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func addCookies(_ newCookies: [HTTPCookie], forHost host: String)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + newCookies + + +
    +

    The cookies to add.

    +
    +
    + + host + + +
    +

    The host which set the cookies..

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Checks whether a cookie matches a domain.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func cookieHost(_ host: String, matchesDomain domain: String) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + host + + +
    +

    The host of the cookie.

    +
    +
    + + domain + + +
    +

    The domain.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns the cookie headers for the specified URL.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func cookieHeaders(forURL url: URL) -> [String:String]
    + +
    +
    +
    +
    +
  • +
+
+
+ + +
+
+ +
    +
  • +
    + + + + performRequest(_:) + +
    +
    +
    +
    +
    +
    +

    Performs an URLRequest.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func performRequest(_ request: URLRequest) throws -> (Data, HTTPURLResponse)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + request + + +
    +

    The request to perform.

    +
    +
    +
    +
    +

    Return Value

    +

    The Data and HTTPURLResponse returned by the request.

    +
    +
    +
    +
  • +
  • +
    + + + + get(_:) + +
    +
    +
    +
    +
    +
    +

    Performs a GET request.

    + +
      +
    • paramter url: The URL to make the request to.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func get(_ url: String) throws -> (Data, HTTPURLResponse)
    + +
    +
    +
    +

    Return Value

    +

    The Data and HTTPURLResponse returned by the request.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Performs a POST request.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func post(_ url: String, data: Data, contentType: String? = nil) throws -> (Data, HTTPURLResponse)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + url + + +
    +

    The URL to make the request to.

    +
    +
    + + data + + +
    +

    The body of the POST request.

    +
    +
    +
    +
    +

    Return Value

    +

    The Data and HTTPURLResponse returned by the request.

    +
    +
    +
    +
  • +
  • +
    + + + + post(_:_:) + +
    +
    +
    +
    +
    +
    +

    Performs a POST request.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func post(_ url: String, _ data: [String:String]) throws -> (Data, HTTPURLResponse)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + url + + +
    +

    The URL to make the request to.

    +
    +
    + + data + + +
    +

    The fields to include in the POST request.

    +
    +
    +
    +
    +

    Return Value

    +

    The Data and HTTPURLResponse returned by the request.

    +
    +
    +
    +
  • +
  • +
    + + + + performRequest(_:) + +
    +
    +
    +
    +
    +
    +

    Performs an URLRequest.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func performRequest(_ request: URLRequest) throws -> String
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + request + + +
    +

    The request to perform.

    +
    +
    +
    +
    +

    Return Value

    +

    The UTF-8 string returned by the request.

    +
    +
    +
    +
  • +
  • +
    + + + + get(_:) + +
    +
    +
    +
    +
    +
    +

    Performs a GET request.

    + +
      +
    • paramter url: The URL to make the request to.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func get(_ url: String) throws -> String
    + +
    +
    +
    +

    Return Value

    +

    The UTF-8 string returned by the request.

    +
    +
    +
    +
  • +
  • +
    + + + + post(_:_:) + +
    +
    +
    +
    +
    +
    +

    Performs a POST request.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func post(_ url: String, _ fields: [String:String]) throws -> String
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + url + + +
    +

    The URL to make the request to.

    +
    +
    + + data + + +
    +

    The fields to include in the POST request.

    +
    +
    +
    +
    +

    Return Value

    +

    The UTF-8 string returned by the request.

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Performs a POST request.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func post(_ url: String, data: Data, contentType: String? = nil) throws -> String
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + url + + +
    +

    The URL to make the request to.

    +
    +
    + + data + + +
    +

    The body of the POST request.

    +
    +
    +
    +
    +

    Return Value

    +

    The UTF-8 string returned by the request.

    +
    +
    +
    +
  • +
  • +
    + + + + parseJSON(_:) + +
    +
    +
    +
    +
    +
    +

    Parses a JSON string.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func parseJSON(_ json: String) throws -> Any
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Initializes a Client.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override public init()
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + host + + +
    +

    The chat host to log in to.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + LoginError + +
    +
    +
    +
    +
    +
    +

    Errors which can occur while logging in.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LoginError: Error
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Logs in to Stack Exchange.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func login(email: String, password: String) throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/Client/LoginError.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/Client/LoginError.html new file mode 100644 index 0000000..3b13dd2 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/Client/LoginError.html @@ -0,0 +1,314 @@ + + + + LoginError Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

LoginError

+
+
+
public enum LoginError: Error
+ +
+
+

Errors which can occur while logging in.

+ +
+
+
+
    +
  • +
    + + + + alreadyLoggedIn + +
    +
    +
    +
    +
    +
    +

    Occurs when the client is already logged in.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case alreadyLoggedIn
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + loginDataNotFound + +
    +
    +
    +
    +
    +
    +

    Occurs when the data to login is not found.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case loginDataNotFound
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + loginFailed + +
    +
    +
    +
    +
    +
    +

    Occurs when a login fails.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case loginFailed(message: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/Client/RequestError.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/Client/RequestError.html new file mode 100644 index 0000000..303afa5 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/Client/RequestError.html @@ -0,0 +1,345 @@ + + + + RequestError Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

RequestError

+
+
+
public enum RequestError: Error
+ +
+
+

Errors which can happen while making a request

+ +
+
+
+
    +
  • +
    + + + + invalidURL + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RequestError: Error
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + notUTF8 + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RequestError: Error
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + unknownError + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RequestError: Error
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + timeout + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum RequestError: Error
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/Command.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/Command.html new file mode 100644 index 0000000..418f1f4 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/Command.html @@ -0,0 +1,509 @@ + + + + Command Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Command

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    +

    Returns an array of possible usages. * means a parameter; … means a variable number of parameters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privileges() + +
    +
    +
    +
    +
    +
    +

    Returns a ChatUser’s privileges.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class func privileges() -> ChatUser.Privileges
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + message + +
    +
    +
    +
    +
    +
    +

    The message that triggered this command.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let message: ChatMessage
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + listener + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
  • +
    + + + + finished + +
    +
    +
    +
    +
    +
    +

    Whether the command has completed execution. Will be set to true automatically by ChatListener.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open internal(set) var finished = false
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + arguments + +
    +
    +
    +
    +
    +
    +

    Arguments passed to the command.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let arguments: [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + usageIndex + +
    +
    +
    +
    +
    +
    +

    Which usage of the command was run. Useful for implementing +commands that share most of their code, like shutdown/reboot.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open let usageIndex: Int
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + reply(_:) + +
    +
    +
    +
    +
    +
    +

    Replies to the message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func reply(_ reply: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + post(_:) + +
    +
    +
    +
    +
    +
    +

    Posts a message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func post(_ message: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    +

    Runs the command.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func run() throws
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Initializes a Command.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public required init(listener: ChatListener, message: ChatMessage, arguments: [String], usageIndex: Int = 0)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandCheckPrivileges.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandCheckPrivileges.html new file mode 100644 index 0000000..839e1dd --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandCheckPrivileges.html @@ -0,0 +1,271 @@ + + + + CommandCheckPrivileges Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandCheckPrivileges

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override public class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override public func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandKill.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandKill.html new file mode 100644 index 0000000..06a7be2 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandKill.html @@ -0,0 +1,297 @@ + + + + CommandKill Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandKill

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privileges() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func privileges() -> ChatUser.Privileges
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandListRunning.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandListRunning.html new file mode 100644 index 0000000..e82e1df --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandListRunning.html @@ -0,0 +1,271 @@ + + + + CommandListRunning Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandListRunning

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandPrivilege.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandPrivilege.html new file mode 100644 index 0000000..8975852 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandPrivilege.html @@ -0,0 +1,297 @@ + + + + CommandPrivilege Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandPrivilege

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privileges() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func privileges() -> ChatUser.Privileges
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandSay.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandSay.html new file mode 100644 index 0000000..c368cde --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandSay.html @@ -0,0 +1,271 @@ + + + + CommandSay Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandSay

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandStop.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandStop.html new file mode 100644 index 0000000..bc420b6 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandStop.html @@ -0,0 +1,297 @@ + + + + CommandStop Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandStop

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privileges() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func privileges() -> ChatUser.Privileges
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandUnprivilege.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandUnprivilege.html new file mode 100644 index 0000000..cb75d93 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/CommandUnprivilege.html @@ -0,0 +1,297 @@ + + + + CommandUnprivilege Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

CommandUnprivilege

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + usage() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func usage() -> [String]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + privileges() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open class func privileges() -> ChatUser.Privileges
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override open func run() throws
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/Levenshtein.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/Levenshtein.html new file mode 100644 index 0000000..1b18ddb --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/Levenshtein.html @@ -0,0 +1,256 @@ + + + + Levenshtein Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Levenshtein

+
+
+
public final class Levenshtein
+ +
+
+

Levenshtein edit distance calculator + From https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#Swift

+ +

Inspired by https://gist.github.com/bgreenlee/52d93a1d8fa1b8c1f38b + Improved with http://stackoverflow.com/questions/26990394/slow-swift-arrays-and-strings-performance

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Calclates and returns the levenshtein distance between two strings.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class func distanceBetween(_ aStr: String, and bStr: String) -> Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/WebSocket.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/WebSocket.html new file mode 100644 index 0000000..2f9a6ba --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/WebSocket.html @@ -0,0 +1,902 @@ + + + + WebSocket Class Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

WebSocket

+
+
+
public class WebSocket
+ +
+
+

Handles all the websocket connections.

+ +
+
+
+
    +
  • +
    + + + + debugLoggingEnabled + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + WebSocketError + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + WebSocketState + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + origin + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + customHeaders + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + url + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + secure + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + state + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + error + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + openHandler + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + textHandler + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + binaryHandler + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + errorHandler + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + closeHandler + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onOpen(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onText(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onBinary(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onError(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + onClose(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + connect() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + write(_:) + +
    +
    +
    +
    +
    +
    +

    Sends a text message across the socket.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func write(_ text: String)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + write(_:) + +
    +
    +
    +
    +
    +
    +

    Sends a binary message across the socket.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func write(_ data: Data)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + disconnect() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class WebSocket
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/WebSocket/WebSocketError.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/WebSocket/WebSocketError.html new file mode 100644 index 0000000..ba2aa19 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/WebSocket/WebSocketError.html @@ -0,0 +1,353 @@ + + + + WebSocketError Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

WebSocketError

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + notURL + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + invalidURL + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+ +
+
+
    +
  • +
    + + + + lwsError + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + textNotUTF8 + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + writeFailed + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Classes/WebSocket/WebSocketState.html b/docs/docsets/.docset/Contents/Resources/Documents/Classes/WebSocket/WebSocketState.html new file mode 100644 index 0000000..efabb16 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Classes/WebSocket/WebSocketState.html @@ -0,0 +1,330 @@ + + + + WebSocketState Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

WebSocketState

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + disconnected + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + connecting + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + connected + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + disconnecting + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + error + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/.docset/Contents/Resources/Documents/Enums.html new file mode 100644 index 0000000..49086ac --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Enums.html @@ -0,0 +1,238 @@ + + + + Enums Reference + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Enums

+

The following enums are available globally.

+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Enums/FileLoadingError.html b/docs/docsets/.docset/Contents/Resources/Documents/Enums/FileLoadingError.html new file mode 100644 index 0000000..0562100 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Enums/FileLoadingError.html @@ -0,0 +1,238 @@ + + + + FileLoadingError Enum Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

FileLoadingError

+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + notUFT8 + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/.docset/Contents/Resources/Documents/Extensions.html new file mode 100644 index 0000000..c995d08 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Extensions.html @@ -0,0 +1,245 @@ + + + + Extensions Reference + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+
+
    +
  • +
    + + + + String + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    struct String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Extensions/String.html b/docs/docsets/.docset/Contents/Resources/Documents/Extensions/String.html new file mode 100644 index 0000000..0a8bd61 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Extensions/String.html @@ -0,0 +1,253 @@ + + + + String Extension Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

String

+
+
+
struct String
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Returns a new string made by replacing in the String +all HTML character entity references with the corresponding +character.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var stringByDecodingHTMLEntities : String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Functions.html b/docs/docsets/.docset/Contents/Resources/Documents/Functions.html new file mode 100644 index 0000000..9152f48 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Functions.html @@ -0,0 +1,420 @@ + + + + Functions Reference + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Functions

+

The following functions are available globally.

+ +
+
+
+
    +
  • +
    + + + + errorAsNSError(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
  • +
    + + + + formatNSError(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
  • +
    + + + + handleError(_:_:) + +
    +
    +
    +
    +
    +
    +

    Logs an error.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func handleError(_ error: Error, _ context: String? = nil)
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Global Variables.html b/docs/docsets/.docset/Contents/Resources/Documents/Global Variables.html new file mode 100644 index 0000000..d82e41a --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Global Variables.html @@ -0,0 +1,414 @@ + + + + Global Variables Reference + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Global Variables

+

The following global variables are available globally.

+ +
+
+
+
    +
  • +
    + + + + errorRoom + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
  • +
    + + + + maxErrors + +
    +
    +
    +
    +
    +
    +

    The maximum amount of errors that can occur in a 30-second period.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var maxErrors = 2
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + afterTooManyErrors + +
    +
    +
    +
    +
    +
    +

    What to do after too many errors. Defaults to calling abort.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var afterTooManyErrors: () -> () = { abort() }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + errorsInLast30Seconds + +
    +
    +
    +
    +
    +
    +

    How many errors have occured within the last 30 seconds.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var errorsInLast30Seconds = 0
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ping + +
    +
    +
    +
    +
    +
    +

    A string that will be appended to the error message so that the bot’s author can be pinged by errors..

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ping = " (cc @<enter owner name here>)"
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pingonerror + +
    +
    +
    +
    +
    +
    +

    A bool variable which will control the usage of the ping ^ variable.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var pingonerror = true
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + userLocation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
  • +
    + + + + saveURL + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs.html new file mode 100644 index 0000000..36aaec6 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs.html @@ -0,0 +1,246 @@ + + + + Structs Reference + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

Structs

+

The following structs are available globally.

+ +
+
+
+
    +
  • +
    + + + + ChatMessage + +
    +
    +
    +
    +
    +
    +

    A ChatMessage represents a message in Stack Exchange chat.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatMessage
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatMessage.html b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatMessage.html new file mode 100644 index 0000000..daa06a0 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/Structs/ChatMessage.html @@ -0,0 +1,414 @@ + + + + ChatMessage Struct Reference + + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+

ChatMessage

+
+
+
public struct ChatMessage
+ +
+
+

A ChatMessage represents a message in Stack Exchange chat.

+ +
+
+
+
    +
  • +
    + + + + room + +
    +
    +
    +
    +
    +
    +

    The room in which this message was posted.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let room: ChatRoom
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + user + +
    +
    +
    +
    +
    +
    +

    The user who posted this message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let user: ChatUser
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + content + +
    +
    +
    +
    +
    +
    +

    The content of this message.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let content: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    This message’s ID, or nil if it is not known.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let id: Int?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + replyID + +
    +
    +
    +
    +
    +
    +

    The message that this message replied to, or nil if this message is not a reply.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let replyID: Int?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatMessage
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + reply(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct ChatMessage
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/badge.svg b/docs/docsets/.docset/Contents/Resources/Documents/badge.svg new file mode 100644 index 0000000..6998e7b --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/badge.svg @@ -0,0 +1 @@ +documentationdocumentation66%66% \ No newline at end of file diff --git a/docs/docsets/.docset/Contents/Resources/Documents/css/highlight.css b/docs/docsets/.docset/Contents/Resources/Documents/css/highlight.css new file mode 100644 index 0000000..d0db0e1 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/css/highlight.css @@ -0,0 +1,200 @@ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight { + /* Comment */ + /* Error */ + /* Keyword */ + /* Operator */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Deleted.Specific */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Inserted.Specific */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Literal.Number.Integer.Long */ } + .highlight .c { + color: #999988; + font-style: italic; } + .highlight .err { + color: #a61717; + background-color: #e3d2d2; } + .highlight .k { + color: #000000; + font-weight: bold; } + .highlight .o { + color: #000000; + font-weight: bold; } + .highlight .cm { + color: #999988; + font-style: italic; } + .highlight .cp { + color: #999999; + font-weight: bold; } + .highlight .c1 { + color: #999988; + font-style: italic; } + .highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + .highlight .gd { + color: #000000; + background-color: #ffdddd; } + .highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + .highlight .ge { + color: #000000; + font-style: italic; } + .highlight .gr { + color: #aa0000; } + .highlight .gh { + color: #999999; } + .highlight .gi { + color: #000000; + background-color: #ddffdd; } + .highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + .highlight .go { + color: #888888; } + .highlight .gp { + color: #555555; } + .highlight .gs { + font-weight: bold; } + .highlight .gu { + color: #aaaaaa; } + .highlight .gt { + color: #aa0000; } + .highlight .kc { + color: #000000; + font-weight: bold; } + .highlight .kd { + color: #000000; + font-weight: bold; } + .highlight .kp { + color: #000000; + font-weight: bold; } + .highlight .kr { + color: #000000; + font-weight: bold; } + .highlight .kt { + color: #445588; } + .highlight .m { + color: #009999; } + .highlight .s { + color: #d14; } + .highlight .na { + color: #008080; } + .highlight .nb { + color: #0086B3; } + .highlight .nc { + color: #445588; + font-weight: bold; } + .highlight .no { + color: #008080; } + .highlight .ni { + color: #800080; } + .highlight .ne { + color: #990000; + font-weight: bold; } + .highlight .nf { + color: #990000; } + .highlight .nn { + color: #555555; } + .highlight .nt { + color: #000080; } + .highlight .nv { + color: #008080; } + .highlight .ow { + color: #000000; + font-weight: bold; } + .highlight .w { + color: #bbbbbb; } + .highlight .mf { + color: #009999; } + .highlight .mh { + color: #009999; } + .highlight .mi { + color: #009999; } + .highlight .mo { + color: #009999; } + .highlight .sb { + color: #d14; } + .highlight .sc { + color: #d14; } + .highlight .sd { + color: #d14; } + .highlight .s2 { + color: #d14; } + .highlight .se { + color: #d14; } + .highlight .sh { + color: #d14; } + .highlight .si { + color: #d14; } + .highlight .sx { + color: #d14; } + .highlight .sr { + color: #009926; } + .highlight .s1 { + color: #d14; } + .highlight .ss { + color: #990073; } + .highlight .bp { + color: #999999; } + .highlight .vc { + color: #008080; } + .highlight .vg { + color: #008080; } + .highlight .vi { + color: #008080; } + .highlight .il { + color: #009999; } diff --git a/docs/docsets/.docset/Contents/Resources/Documents/css/jazzy.css b/docs/docsets/.docset/Contents/Resources/Documents/css/jazzy.css new file mode 100644 index 0000000..d628282 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/css/jazzy.css @@ -0,0 +1,337 @@ +html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { + background: transparent; + border: 0; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; } + +body { + background-color: #f2f2f2; + font-family: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + -webkit-font-smoothing: subpixel-antialiased; + word-wrap: break-word; } + +h1, h2, h3 { + margin-top: 0.8em; + margin-bottom: 0.3em; + font-weight: 100; + color: black; } + +h1 { + font-size: 2.5em; } + +h2 { + font-size: 2em; + border-bottom: 1px solid #e2e2e2; } + +h4 { + font-size: 13px; + line-height: 1.5; + margin-top: 21px; } + +h5 { + font-size: 1.1em; } + +h6 { + font-size: 1.1em; + color: #777; } + +.section-name { + color: gray; + display: block; + font-family: Helvetica; + font-size: 22px; + font-weight: 100; + margin-bottom: 15px; } + +pre, code { + font: 0.95em Menlo, monospace; + color: #777; + word-wrap: normal; } + +p code, li code { + background-color: #eee; + padding: 2px 4px; + border-radius: 4px; } + +a { + color: #0088cc; + text-decoration: none; } + +ul { + padding-left: 15px; } + +li { + line-height: 1.8em; } + +img { + max-width: 100%; } + +blockquote { + margin-left: 0; + padding: 0 10px; + border-left: 4px solid #ccc; } + +.content-wrapper { + margin: 0 auto; + width: 980px; } + +header { + font-size: 0.85em; + line-height: 26px; + background-color: #414141; + position: fixed; + width: 100%; + z-index: 1; } + header img { + padding-right: 6px; + vertical-align: -4px; + height: 16px; } + header a { + color: #fff; } + header p { + float: left; + color: #999; } + header .header-right { + float: right; + margin-left: 16px; } + +#breadcrumbs { + background-color: #f2f2f2; + height: 27px; + padding-top: 17px; + position: fixed; + width: 100%; + z-index: 1; + margin-top: 26px; } + #breadcrumbs #carat { + height: 10px; + margin: 0 5px; } + +.sidebar { + background-color: #f9f9f9; + border: 1px solid #e2e2e2; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + top: 70px; + bottom: 0; + width: 230px; + word-wrap: normal; } + +.nav-groups { + list-style-type: none; + background: #fff; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #e2e2e2; + font-size: 1.1em; + font-weight: 100; + padding: 15px 0 15px 20px; } + .nav-group-name > a { + color: #333; } + +.nav-group-tasks { + margin-top: 5px; } + +.nav-group-task { + font-size: 0.9em; + list-style-type: none; + white-space: nowrap; } + .nav-group-task a { + color: #888; } + +.main-content { + background-color: #fff; + border: 1px solid #e2e2e2; + margin-left: 246px; + position: absolute; + overflow: hidden; + padding-bottom: 60px; + top: 70px; + width: 734px; } + .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { + margin-bottom: 1em; } + .main-content p { + line-height: 1.8em; } + .main-content section .section:first-child { + margin-top: 0; + padding-top: 0; } + .main-content section .task-group-section .task-group:first-of-type { + padding-top: 10px; } + .main-content section .task-group-section .task-group:first-of-type .section-name { + padding-top: 15px; } + .main-content section .heading:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.section { + padding: 0 25px; } + +.highlight { + background-color: #eee; + padding: 10px 12px; + border: 1px solid #e2e2e2; + border-radius: 4px; + overflow-x: auto; } + +.declaration .highlight { + overflow-x: initial; + padding: 0 40px 40px 0; + margin-bottom: -25px; + background-color: transparent; + border: none; } + +.section-name { + margin: 0; + margin-left: 18px; } + +.task-group-section { + padding-left: 6px; + border-top: 1px solid #e2e2e2; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .item code { + background-color: transparent; + padding: 0; } + .item .token { + padding-left: 3px; + margin-left: 15px; + font-size: 11.9px; } + .item .declaration-note { + font-size: .85em; + color: gray; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #e2e2e2; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + background: #f9f9f9; + border-left: 1px solid #e2e2e2; + border-top: 1px solid #e2e2e2; + height: 12px; + left: 21px; + top: -7px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + width: 12px; } + +.height-container { + display: none; + left: -25px; + padding: 0 25px; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #f9f9f9; + border-bottom: 1px solid #e2e2e2; + left: -25px; + position: relative; + width: 100%; + padding-top: 10px; + padding-bottom: 5px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4b8afb; } + +.aside-warning { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #e2e2e2; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +#footer { + position: absolute; + bottom: 10px; + margin-left: 25px; } + #footer p { + margin: 0; + color: #aaa; + font-size: 0.8em; } + +html.dash header, html.dash #breadcrumbs, html.dash .sidebar { + display: none; } +html.dash .main-content { + width: 980px; + margin-left: 0; + border: none; + width: 100%; + top: 0; + padding-bottom: 0; } +html.dash .height-container { + display: block; } +html.dash .item .token { + margin-left: 0; } +html.dash .content-wrapper { + width: auto; } +html.dash #footer { + position: static; } diff --git a/docs/docsets/.docset/Contents/Resources/Documents/img/carat.png b/docs/docsets/.docset/Contents/Resources/Documents/img/carat.png new file mode 100755 index 0000000..29d2f7f Binary files /dev/null and b/docs/docsets/.docset/Contents/Resources/Documents/img/carat.png differ diff --git a/docs/docsets/.docset/Contents/Resources/Documents/img/dash.png b/docs/docsets/.docset/Contents/Resources/Documents/img/dash.png new file mode 100755 index 0000000..6f694c7 Binary files /dev/null and b/docs/docsets/.docset/Contents/Resources/Documents/img/dash.png differ diff --git a/docs/docsets/.docset/Contents/Resources/Documents/img/gh.png b/docs/docsets/.docset/Contents/Resources/Documents/img/gh.png new file mode 100755 index 0000000..628da97 Binary files /dev/null and b/docs/docsets/.docset/Contents/Resources/Documents/img/gh.png differ diff --git a/docs/docsets/.docset/Contents/Resources/Documents/index.html b/docs/docsets/.docset/Contents/Resources/Documents/index.html new file mode 100644 index 0000000..8b79ffa --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/index.html @@ -0,0 +1,280 @@ + + + + Reference + + + + + + + + + +
+
+

Docs (66% documented)

+
+
+
+ +
+
+ +
+
+
+ +

SwiftChatSE

+ +

A Swift library for Stack Exchange chat

+ +

SwiftChatSE is a library made from FireAlarm-Swift‘s chat code. It works on macOS and Linux.

+

Example

+ +

Here are instructions to build a simple program which posts Hello, world! in SOBotics.

+

Installing libwebsockets

+ +

brew and apt-get provide different versions of libwebsockets, and both are outdated, so you’ll have to install it from source. Make sure you have OpenSSL and CMake installed, and run the following commands to download and install libwebsockets from here:

+
git clone https://github.com/warmcat/libwebsockets.git
+cd libwebsockets
+mkdir build
+cd build
+export OPENSSL_ROOT_DIR=$(brew --prefix openssl)
+cmake ..
+make
+sudo  make install
+
+

Writing and building the program

+ +

Create a Swift Package Manager project:

+
mkdir ChatTest
+cd ChatTest
+swift package init --type executable
+
+ +

Modify Package.swift:

+
import PackageDescription
+
+let package = Package(
+    name: "ChatTest",
+    dependencies: [
+        .Package(url: "git://github.com/SOBotics/SwiftChatSE", majorVersion: 4)
+    ]
+)
+
+ +

Now write the code, in Sources/main.swift:

+
import SwiftChatSE
+
+let email = "<email>"
+let password = "<password>"
+
+//Create a Client and log in to Stack Overflow.
+let client = Client(host: .StackOverflow)
+try! client.login(email: email, password: password)
+
+//Join a chat room.
+let room = ChatRoom(client: client, roomID: 111347) //SOBotics
+try! room.join()
+
+//Post a message.
+room.postMessage("Hello, world!")
+
+
+room.leave()
+
+ +

You’ll have to run the following command to build:

+
swift build -Xswiftc -lwebsockets -Xswiftc -I/usr/local/opt/openssl/include -Xswiftc -I/usr/local/include -Xlinker -lwebsockets -Xlinker -L/usr/local/lib
+
+ +

After running the swift build command, the executable will be placed in the directory .build. If you want to use Xcode to develop, just copy swiftchatse.xcconfig to your project directory and run:

+
swift package generate-xcodeproj --xcconfig-overrides swiftchatse.xcconfig
+
+ +

to generate an Xcode project. You’ll have to recreate the project if you add files or change package settings.

+ +
+
+ +
+
+ + + diff --git a/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.js b/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.js new file mode 100755 index 0000000..3965b5f --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/js/jazzy.js @@ -0,0 +1,46 @@ +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +// On doc load, toggle the URL hash discussion if present +$(document).ready(function() { + if (!window.jazzy.docset) { + var linkToHash = $('a[href="' + window.location.hash +'"]'); + linkToHash.trigger("click"); + } +}); + +// On token click, toggle its discussion and animate token.marginLeft +$(".token").click(function(event) { + if (window.jazzy.docset) { + return; + } + var link = $(this); + var animationDuration = 300; + var tokenOffset = "15px"; + var original = link.css('marginLeft') == tokenOffset; + link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration); + $content = link.parent().parent().next(); + $content.slideToggle(animationDuration); + + // Keeps the document from jumping to the hash. + var href = $(this).attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Dumb down quotes within code blocks that delimit strings instead of quotations +// https://github.com/realm/jazzy/issues/714 +$("code q").replaceWith(function () { + return ["\"", $(this).contents(), "\""]; +}); diff --git a/docs/docsets/.docset/Contents/Resources/Documents/js/jquery.min.js b/docs/docsets/.docset/Contents/Resources/Documents/js/jquery.min.js new file mode 100755 index 0000000..ab28a24 --- /dev/null +++ b/docs/docsets/.docset/Contents/Resources/Documents/js/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; +if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("