The glacier Reference Manual

Next: , Previous: , Up: (dir)   [Contents][Index]

The glacier Reference Manual

This is the glacier Reference Manual, version 0.3, generated automatically by Declt version 4.0 beta 2 "William Riker" on Thu Sep 15 04:54:18 2022 GMT+0.

Table of Contents


1 Introduction

glacier logo

ava fox

lightweight wrapper for making mastodon bots

Installation

clone this repo into your local system definitions or ~/common-lisp folder

Usage

create a bot object, passing it (at minimum) a path to your config file

then pass that bot object to (glacier:run-bot)

if you pass nothing else but the bot object, the framework will drop into a loop monitoring for updates and running the proper handlers from your bot (assuming you specified what handlers to run when creating your bot object)

you can pass code along with your bot to (glacier:run-bot) and it will run that code along with monitoring for streaming updates

NOTE: if you pass code that doesn't block forever, the bot will exit without doing anything

;; bad example
(glacier:run-bot (my-bot)
  (format t "my bot is running!")) ;; this doesn't block, so we print this and exit

see below for good examples

most objects that get passed around are tooter objects, so it probably wouldnt hurt to get acquainted with that library.

Examples

the following runs a bot (using the instance and access token specified in the config) that posts "trans rights are human rights" every 30 minutes

please see the example config for option names

(glacier:run-bot ((make-bot :instance "mastodon.social" :access-token "n0tArealT0KEn"))
  (glacier:after-every (30 :minutes)
    (glacier:post "trans rights are human rights" :visibility :public)))

the following runs a bot that responds to a mention with a cordial hello

(defun maybe-respond (notification)
  "respond to a status from a mention NOTIFICATION"
  (when (glacier:mention-p notification)
    (glacier:reply (tooter:status notification) "hi! :3")))

(glacier:run-bot ((make-bot :config-file "/path/to/bot.config" :on-notification #'maybe-respond)))

the following runs a bot that will respond to posts with !hello in them with status personalized with their displayname

(defun cordial-reply (status)
  (glacier:reply status (format nil "hi, ~a! :3"
                        (tooter:display-name (tooter:account status)))))

(glacier:add-command "hello" #'cordial-reply)

(glacier:run-bot ((make-bot :config-file "/path/to/bot.config")))

API

make-bot (&key config-file instance access-token (strip-html t) strip-username (timeline "user") on-update on-delete on-notification)

makes a bot and returns it.

INSTANCE, ACCESS-TOKEN, STRIP-HTML, STRIP-USERNAME, TIMELINE are all options that are typically in a config file passing these values in allows the developer to skip specifying a config file and can pull values in from other places e.g., command line arguments

CONFIG-FILE is a string or a path that denotes a glacier config file

INSTANCE is a mastodon instance domain name, with or without http scheme

ACCESS-TOKEN is an access token for a mastodon account on INSTANCE

STRIP-HTML if non-nil incoming posts will have their html stripped from them. defaults to T

STRIP-USERNAME if non-nil strips the bot's username from incoming posts. defaults to NIL

TIMELINE string denoting which timeline should be used for the streaming websocket. can be one of 'user', 'public', 'direct'. defaults to 'user'

ON-UPDATE a function that accepts a single mastodon status. gets ran for every new post that streams in from TIMELINE

ON-DELETE a function that accepts a single status id. gets ran for every deleted status that streams in from TIMELINE

ON-NOTIFICATION a function that accepts a single mastodon notification. gets ran for every notification that streams in from TIMELINE


run-bot ((bot &key delete-command (with-websocket t)) &body body)

runs BOT, setting up websocket handlers and starting the streaming connection before executing BODY

if DELETE-COMMAND is non-nil, automatically adds a delete command if WITH-WEBSOCKET is non-nil (default), automatically starts up a websocket listener for realtime updates

NOTE: DELETE-COMMAND is ignored if WITH-WEBSOCKET is nil

if BODY is not provided drops into a loop where we sleep until the user quits us, or our connection closes. this functionality does not happen if WITH-WEBSOCKET is nil.


post (text &key (visibility :unlisted) cw media sensitive)

a thin wrapper around TOOTER:MAKE-STATUS

(post "hi~" :visibility :public)


reply (status text &key include-mentions media)

replys to STATUS with TEXT

if include-mentions is non-nil then the reply will contain all mentions from the original status

NOTE: reply will always include an @ to the person it's replying to


mention-p (notification)

returns T if NOTIFICATION is a mention


fave-p (notification)

returns T if NOTIFICATION is a favourite


boost-p (notification)

returns T if NOTIFICATION is a boost


poll-ended-p (notification)

returns T if NOTIFICATION is from a poll ending


follow-request-p (notification)

returns T if NOTIFICATION is a follow-request


follow-p (notification)

returns T if NOTIFICATION is a follow


bot-post-p (status)

returns T if STATUS was posted by the bot


no-bot-p (account-or-mention)

returns T if ACCOUNT (or account from MENTION) has #NoBot in their profile's bio


delete-parent (status)

deletes the parent to STATUS if it was made by the bot


after ((amount duration &key async) &body body)

runs BODY after AMOUNT of DURATION time has passed

if ASYNC is non-nil runs asynchronously

(after (3 :minutes) (print "hello"))

;; (after 3 minutes)
;;=> "hello"

after-every ((amount duration &key async run-immediately) &body body)

same as AFTER except repeats after every duration

if RUN-IMMEDIATELY is non-nil, executes BODY once before waiting for the next iteration


on ((day &key at async) &body body

runs BODY on DAY, optionally AT a time

DAY is a keyword with the day of the week (e.g., :sunday, :monday, etc)

AT is a string denoting a time (e.g., "13:20", "4:20PM", "23:00")

if ASYNC is non-nil code is executed asynchronously

if AT is nil, code is ran at midnight on DAY


add-command (cmd function &key privileged add-prefix)

adds a command with CMD being the text to trigger the command and FUNCTION being the function that runs

FUNCTION needs to accept one parameter: a tooter:status object

if PRIVILEGED is non-nil, the bot needs to be following the account the mention comes from for the command to be triggered

if ADD-PREFIX is non-nil, adds *COMMAND-PREFIX* to the front of CMD


*command-prefix*

the string that prefixes commands.

defaults to "!"


terminate-connection

terminates the websocket connection that feeds the bot streaming updates

effectively terminates the bot


License

BSD 3-Clause


2 Systems

The main system appears first, followed by any subsystem dependency.


Previous: , Up: Systems   [Contents][Index]

2.1 glacier

lightweight mastodon bot framework

Author

ava fox

License

BSD 3-Clause

Version

0.3

Dependencies
  • dexador (system).
  • bordeaux-threads (system).
  • str (system).
  • websocket-driver (system).
  • simple-config (system).
  • cl-json (system).
  • tooter (system).
  • cl-ppcre (system).
  • alexandria (system).
Source

glacier.asd.

Child Components

3 Files

Files are sorted by type and then listed depth-first from the systems components trees.


Previous: , Up: Files   [Contents][Index]

3.1 Lisp


Next: , Previous: , Up: Lisp   [Contents][Index]

3.1.1 glacier/glacier.asd

Source

glacier.asd.

Parent Component

glacier (system).

ASDF Systems

glacier.


3.1.2 glacier/package.lisp

Source

glacier.asd.

Parent Component

glacier (system).

Packages

glacier.


3.1.3 glacier/bot.lisp

Dependency

package.lisp (file).

Source

glacier.asd.

Parent Component

glacier (system).

Public Interface
Internals

Next: , Previous: , Up: Lisp   [Contents][Index]

3.1.4 glacier/extensions.lisp

Dependency

bot.lisp (file).

Source

glacier.asd.

Parent Component

glacier (system).

Public Interface
Internals

3.1.5 glacier/util.lisp

Dependency

extensions.lisp (file).

Source

glacier.asd.

Parent Component

glacier (system).

Public Interface
Internals

Previous: , Up: Lisp   [Contents][Index]

3.1.6 glacier/glacier.lisp

Dependency

util.lisp (file).

Source

glacier.asd.

Parent Component

glacier (system).

Public Interface
Internals

4 Packages

Packages are listed by definition order.


Previous: , Up: Packages   [Contents][Index]

4.1 glacier

Source

package.lisp.

Use List

common-lisp.

Public Interface
Internals

5 Definitions

Definitions are sorted by export status, category, package, and then by lexicographic order.


Next: , Previous: , Up: Definitions   [Contents][Index]

5.1 Public Interface


Next: , Previous: , Up: Public Interface   [Contents][Index]

5.1.1 Special variables

Special Variable: *command-prefix*

character or string that prefixes a command

Package

glacier.

Source

bot.lisp.


5.1.2 Macros

Macro: after ((amount duration &key async) &body body)

runs BODY after AMOUNT of DURATION

if ASYNC is non-nil, runs asynchronously

Package

glacier.

Source

util.lisp.

Macro: after-every ((amount duration &key async run-immediately) &body body)

runs BODY after every AMOUNT of DURATION

if ASYNC is non-nil, runs asynchronously
if RUN-IMMEDIATELY is non-nil, runs BODY once before waiting for next invocation

Package

glacier.

Source

util.lisp.

Macro: on ((day &key at async) &body body)

runs BODY on DAY, optionally AT a time

DAY is a keyword with the day of the week (e.g., :sunday, :monday, etc) AT is a string denoting a time (e.g., ’13:20’, ’4:20PM’, ’23:00’)

if ASYNC is non-nil code is executed asynchronously
if AT is nil, code is ran at midnight on DAY

Package

glacier.

Source

util.lisp.

Macro: run-bot ((bot &key delete-command with-websocket) &body body)

runs BOT, setting up websocket handlers and starting the streaming connection before executing BODY

if DELETE-COMMAND is non-nil, automatically adds a delete command
if WITH-WEBSOCKET is non-nil (default), automatically starts up a websocket listener for realtime updates

NOTE: DELETE-COMMAND is ignored used if WITH-WEBSOCKET is nil

if BODY is not provided drops into a loop where we sleep until the user quits us, or our connection closes. this functionality does not happen if WITH-WEBSOCKET is nil.

Package

glacier.

Source

glacier.lisp.


5.1.3 Ordinary functions

Function: add-command (cmd function &key privileged add-prefix)

adds a command into our hash

CMD should be a string
FUNCTION should be a function that accepts a single parameter (a tooter:status object)

if PRIVILEGED is non-nil, command will only be triggered if mention is sent by an account the bot is following if ADD-PREFIX is non-nil, adds *COMMAND-PREFIX* to the front of CMD (defaults to t)

Package

glacier.

Source

util.lisp.

Function: agetf (place indicator &optional default)

getf but for alists

Package

glacier.

Source

util.lisp.

Function: boost-p (notification)

checks if NOTIFICATION is a boost

Package

glacier.

Source

util.lisp.

Function: bot-post-p (status)

checks if STATUS was posted by the bot

Package

glacier.

Source

util.lisp.

Function: delete-parent (status)

deletes the parent post of STATUS if it was posted by the bot

Package

glacier.

Source

util.lisp.

Function: fave-p (notification)

checks if NOTIFICATION is a favourite

Package

glacier.

Source

util.lisp.

Function: follow-p (notification)

checks if NOTIFICATION is a follow

Package

glacier.

Source

util.lisp.

Function: follow-request-p (notification)

checks if NOTIFICATION is a follow request

Package

glacier.

Source

util.lisp.

Function: make-bot (&key config-file instance access-token strip-html strip-username timeline on-update on-delete on-notification)

makes a bot and returns it.
INSTANCE, ACCESS-TOKEN, STRIP-HTML, STRIP-USERNAME, TIMELINE are all options that are typically in a config file
passing these values in allows the developer to skip specifying a config file and can pull values in from other places
e.g., command line arguments

CONFIG-FILE is a string or a path that denotes a glacier config file
INSTANCE is a mastodon instance domain name, with or without http scheme
ACCESS-TOKEN is an access token for a mastodon account on INSTANCE
STRIP-HTML if non-nil incoming posts will have their html stripped from them. defaults to T
STRIP-USERNAME if non-nil strips the bot’s username from incoming posts. defaults to NIL
TIMELINE string denoting which timeline should be used for the streaming websocket. can be one of ’user’, ’public’, ’direct’. defaults to ’user’ ON-UPDATE a function that accepts a single mastodon status. gets ran for every new post that streams in from TIMELINE
ON-DELETE a function that accepts a single status id. gets ran for every deleted status that streams in from TIMELINE
ON-NOTIFICATION a function that accepts a single mastodon notification. gets ran for every notification that streams in from TIMELINE

Package

glacier.

Source

bot.lisp.

Function: mention-p (notification)

checks if NOTIFICATION is a mention

Package

glacier.

Source

util.lisp.

Function: poll-ended-p (notification)

checks if NOTIFICATION is a poll

Package

glacier.

Source

util.lisp.

Function: post (text &key visibility cw sensitive media)

a thin wrapper around tooter:make-status

see documentation for that function

Package

glacier.

Source

extensions.lisp.

Function: terminate-connection ()

closes the websocket connection and clears the variable from memory

Package

glacier.

Source

glacier.lisp.


5.1.4 Generic functions

Generic Reader: bot-client (object)
Package

glacier.

Methods
Reader Method: bot-client ((mastodon-bot mastodon-bot))

automatically generated reader method

Source

bot.lisp.

Target Slot

client.

Generic Reader: bot-on-delete (object)
Package

glacier.

Methods
Reader Method: bot-on-delete ((mastodon-bot mastodon-bot))

automatically generated reader method

Source

bot.lisp.

Target Slot

on-delete.

Generic Writer: (setf bot-on-delete) (object)
Package

glacier.

Methods
Writer Method: (setf bot-on-delete) ((mastodon-bot mastodon-bot))

automatically generated writer method

Source

bot.lisp.

Target Slot

on-delete.

Generic Reader: bot-on-notification (object)
Package

glacier.

Methods
Reader Method: bot-on-notification ((mastodon-bot mastodon-bot))

automatically generated reader method

Source

bot.lisp.

Target Slot

on-notification.

Generic Writer: (setf bot-on-notification) (object)
Package

glacier.

Methods
Writer Method: (setf bot-on-notification) ((mastodon-bot mastodon-bot))

automatically generated writer method

Source

bot.lisp.

Target Slot

on-notification.

Generic Reader: bot-on-update (object)
Package

glacier.

Methods
Reader Method: bot-on-update ((mastodon-bot mastodon-bot))

automatically generated reader method

Source

bot.lisp.

Target Slot

on-update.

Generic Writer: (setf bot-on-update) (object)
Package

glacier.

Methods
Writer Method: (setf bot-on-update) ((mastodon-bot mastodon-bot))

automatically generated writer method

Source

bot.lisp.

Target Slot

on-update.

Generic Reader: bot-username (object)
Package

glacier.

Methods
Reader Method: bot-username ((mastodon-bot mastodon-bot))

automatically generated reader method

Source

bot.lisp.

Target Slot

account-username.

Generic Function: no-bot-p (id)
Package

glacier.

Methods
Method: no-bot-p ((mention mention))

checks account found in MENTION to see if they have NoBot set

Source

extensions.lisp.

Method: no-bot-p ((account account))

checks an account’s bio and profile fields to see if they contain a NoBot tag

Source

extensions.lisp.

Method: no-bot-p ((id string))

checks an account’s bio and profile fields to see if they contain a NoBot tag

Source

extensions.lisp.

Generic Function: reply (status text &key include-mentions media cw sensitive visibility)
Package

glacier.

Methods
Method: reply ((status status) text &key include-mentions media cw sensitive visibility)

replies to a STATUS with TEXT. copies the visibility and content warning as the post it’s replying to

if INCLUDE-MENTIONS is non-nil, include mentions besides the primary account being replied to

Source

extensions.lisp.


5.1.5 Standalone methods

Method: initialize-instance :after ((bot mastodon-bot) &rest initargs &key config-file instance token strip-html strip-username timeline &allow-other-keys)
Source

bot.lisp.


5.1.6 Classes

Class: bot-client
Package

glacier.

Source

bot.lisp.

Direct superclasses

client.

Direct Default Initargs
InitargValue
:nameglacierbot
:websitehttps://github.com/compufox/glacier
Class: mastodon-bot

bot superclass

Package

glacier.

Source

bot.lisp.

Direct methods
Direct slots
Slot: on-update
Initargs

:on-update

Readers

bot-on-update.

Writers

(setf bot-on-update).

Slot: on-delete
Initargs

:on-delete

Readers

bot-on-delete.

Writers

(setf bot-on-delete).

Slot: on-notification
Initargs

:on-notification

Readers

bot-on-notification.

Writers

(setf bot-on-notification).

Slot: account-id
Readers

bot-account-id.

Writers

This slot is read-only.

Slot: account-username
Readers

bot-username.

Writers

This slot is read-only.

Slot: client
Readers

bot-client.

Writers

This slot is read-only.


5.2 Internals


Next: , Previous: , Up: Internals   [Contents][Index]

5.2.1 Special variables

Special Variable: *bot*

global bot object

Package

glacier.

Source

bot.lisp.

Special Variable: *commands*

hash table containing the bot’s commands

KEY is the command as a string
VALUE is a function that accepts a tooter:status object as a parameter

Package

glacier.

Source

bot.lisp.

Special Variable: *no-bot-regex*

regex to check for the NoBot tag

Package

glacier.

Source

extensions.lisp.

Special Variable: *privileged-commands*

hash table containing commands that will only be ran if the mention is from an account the bot follows

KEY is the command as a string
VALUE is a function that accepts a tooter:status object as a parameter

Package

glacier.

Source

bot.lisp.

Special Variable: *websocket-client*

global websocket client

Package

glacier.

Source

glacier.lisp.


5.2.2 Ordinary functions

Function: add-scheme (domain)

adds https scheme to DOMAIN if it isnt already there

Package

glacier.

Source

util.lisp.

Function: api-request (fragment &optional result-type)

perform an API request

FRAGMENT is the fragment of the url that goes AFTER api/v1/
RESULT-TYPE (if provided) is the object type that we should use when parsing the response can be either a symbol (’account) or list ’(:list account)

if it is a list then we decode the response and collect and return them as a list

Package

glacier.

Source

extensions.lisp.

Function: command-dispatch (status)

parses STATUS content for a command word, and runs any function it has in *commands* with it as the argument

if STATUS comes from an account the bot is following, also checks for any command in *privileged-commands*

Package

glacier.

Source

glacier.lisp.

Function: commandp (word)

checks if WORD is a command

Package

glacier.

Source

util.lisp.

Function: current-day ()

returns the current day of the week

Package

glacier.

Source

util.lisp.

Function: dispatch (message)

gets the type of MESSAGE we received and calls the appropriate functions on our bot with the proper tooter object

Package

glacier.

Source

glacier.lisp.

Function: dow-for (day)

returns the day of the week for DAY

Package

glacier.

Source

util.lisp.

Function: get-mastodon-streaming-url ()

gets the websocket url for the mastodon instance

Package

glacier.

Source

util.lisp.

Function: parse-time (amount duration)

parses AMOUNT of DURATION into seconds

Package

glacier.

Source

util.lisp.

Function: print-close (&key code reason)

prints a message when the websocket is closed

Package

glacier.

Source

util.lisp.

Function: print-open ()

prints a message when the websocket is connected

Package

glacier.

Source

util.lisp.

Function: privileged-reply-p (status)

returns T if STATUS is from an account that the bot follows

Package

glacier.

Source

util.lisp.

Function: seconds-until (hours minutes &optional seconds)

determines how many seconds until HOURS MINUTES and SECONDS
if the time has already passed it returns 0 instead of a negative time

Package

glacier.

Source

util.lisp.

Function: seconds-until-midnight ()

returns how many seconds until it’s midnight

Package

glacier.

Source

util.lisp.

Function: seconds-until-timestring (time-string)

parses TIME-STRING and returns how long until the time specified TIME-STRING is of the form ’12:04’, ’18:30’, ’1:10PM’, etc

Package

glacier.

Source

util.lisp.

Function: upload-media (media)

uploads MEDIA to the defined mastodon server.
returns a list that can be passed into POST or REPLY
MEDIA may be a list containing pathnames, or lists of the form (PATH-TO-FILE IMAGE-DESCRIPTION) if it is like the latter, the description will be applied to the image upon uploading

Package

glacier.

Source

extensions.lisp.


5.2.3 Generic functions

Generic Reader: bot-account-id (object)
Package

glacier.

Methods
Reader Method: bot-account-id ((mastodon-bot mastodon-bot))

automatically generated reader method

Source

bot.lisp.

Target Slot

account-id.


Appendix A Indexes


Next: , Previous: , Up: Indexes   [Contents][Index]

A.1 Concepts


Next: , Previous: , Up: Indexes   [Contents][Index]

A.2 Functions

Jump to:   (  
A   B   C   D   F   G   I   M   N   O   P   R   S   T   U  
Index Entry  Section

(
(setf bot-on-delete): Public generic functions
(setf bot-on-delete): Public generic functions
(setf bot-on-notification): Public generic functions
(setf bot-on-notification): Public generic functions
(setf bot-on-update): Public generic functions
(setf bot-on-update): Public generic functions

A
add-command: Public ordinary functions
add-scheme: Private ordinary functions
after: Public macros
after-every: Public macros
agetf: Public ordinary functions
api-request: Private ordinary functions

B
boost-p: Public ordinary functions
bot-account-id: Private generic functions
bot-account-id: Private generic functions
bot-client: Public generic functions
bot-client: Public generic functions
bot-on-delete: Public generic functions
bot-on-delete: Public generic functions
bot-on-notification: Public generic functions
bot-on-notification: Public generic functions
bot-on-update: Public generic functions
bot-on-update: Public generic functions
bot-post-p: Public ordinary functions
bot-username: Public generic functions
bot-username: Public generic functions

C
command-dispatch: Private ordinary functions
commandp: Private ordinary functions
current-day: Private ordinary functions

D
delete-parent: Public ordinary functions
dispatch: Private ordinary functions
dow-for: Private ordinary functions

F
fave-p: Public ordinary functions
follow-p: Public ordinary functions
follow-request-p: Public ordinary functions
Function, add-command: Public ordinary functions
Function, add-scheme: Private ordinary functions
Function, agetf: Public ordinary functions
Function, api-request: Private ordinary functions
Function, boost-p: Public ordinary functions
Function, bot-post-p: Public ordinary functions
Function, command-dispatch: Private ordinary functions
Function, commandp: Private ordinary functions
Function, current-day: Private ordinary functions
Function, delete-parent: Public ordinary functions
Function, dispatch: Private ordinary functions
Function, dow-for: Private ordinary functions
Function, fave-p: Public ordinary functions
Function, follow-p: Public ordinary functions
Function, follow-request-p: Public ordinary functions
Function, get-mastodon-streaming-url: Private ordinary functions
Function, make-bot: Public ordinary functions
Function, mention-p: Public ordinary functions
Function, parse-time: Private ordinary functions
Function, poll-ended-p: Public ordinary functions
Function, post: Public ordinary functions
Function, print-close: Private ordinary functions
Function, print-open: Private ordinary functions
Function, privileged-reply-p: Private ordinary functions
Function, seconds-until: Private ordinary functions
Function, seconds-until-midnight: Private ordinary functions
Function, seconds-until-timestring: Private ordinary functions
Function, terminate-connection: Public ordinary functions
Function, upload-media: Private ordinary functions

G
Generic Function, (setf bot-on-delete): Public generic functions
Generic Function, (setf bot-on-notification): Public generic functions
Generic Function, (setf bot-on-update): Public generic functions
Generic Function, bot-account-id: Private generic functions
Generic Function, bot-client: Public generic functions
Generic Function, bot-on-delete: Public generic functions
Generic Function, bot-on-notification: Public generic functions
Generic Function, bot-on-update: Public generic functions
Generic Function, bot-username: Public generic functions
Generic Function, no-bot-p: Public generic functions
Generic Function, reply: Public generic functions
get-mastodon-streaming-url: Private ordinary functions

I
initialize-instance: Public standalone methods

M
Macro, after: Public macros
Macro, after-every: Public macros
Macro, on: Public macros
Macro, run-bot: Public macros
make-bot: Public ordinary functions
mention-p: Public ordinary functions
Method, (setf bot-on-delete): Public generic functions
Method, (setf bot-on-notification): Public generic functions
Method, (setf bot-on-update): Public generic functions
Method, bot-account-id: Private generic functions
Method, bot-client: Public generic functions
Method, bot-on-delete: Public generic functions
Method, bot-on-notification: Public generic functions
Method, bot-on-update: Public generic functions
Method, bot-username: Public generic functions
Method, initialize-instance: Public standalone methods
Method, no-bot-p: Public generic functions
Method, no-bot-p: Public generic functions
Method, no-bot-p: Public generic functions
Method, reply: Public generic functions

N
no-bot-p: Public generic functions
no-bot-p: Public generic functions
no-bot-p: Public generic functions
no-bot-p: Public generic functions

O
on: Public macros

P
parse-time: Private ordinary functions
poll-ended-p: Public ordinary functions
post: Public ordinary functions
print-close: Private ordinary functions
print-open: Private ordinary functions
privileged-reply-p: Private ordinary functions

R
reply: Public generic functions
reply: Public generic functions
run-bot: Public macros

S
seconds-until: Private ordinary functions
seconds-until-midnight: Private ordinary functions
seconds-until-timestring: Private ordinary functions

T
terminate-connection: Public ordinary functions

U
upload-media: Private ordinary functions

Jump to:   (  
A   B   C   D   F   G   I   M   N   O   P   R   S   T   U