diff --git a/docs/doctrees/apireference.doctree b/docs/doctrees/apireference.doctree
index d680d3dc..c05672cc 100644
Binary files a/docs/doctrees/apireference.doctree and b/docs/doctrees/apireference.doctree differ
diff --git a/docs/doctrees/environment.pickle b/docs/doctrees/environment.pickle
index 4f557d01..133ab897 100644
Binary files a/docs/doctrees/environment.pickle and b/docs/doctrees/environment.pickle differ
diff --git a/docs/doctrees/index.doctree b/docs/doctrees/index.doctree
index 92d04b5b..3a92692f 100644
Binary files a/docs/doctrees/index.doctree and b/docs/doctrees/index.doctree differ
diff --git a/docs/doctrees/packs/command.doctree b/docs/doctrees/packs/command.doctree
index eaa917e4..34513208 100644
Binary files a/docs/doctrees/packs/command.doctree and b/docs/doctrees/packs/command.doctree differ
diff --git a/docs/doctrees/packs/pack.doctree b/docs/doctrees/packs/pack.doctree
index 5b106f60..ec7a0aef 100644
Binary files a/docs/doctrees/packs/pack.doctree and b/docs/doctrees/packs/pack.doctree differ
diff --git a/docs/html/.buildinfo b/docs/html/.buildinfo
index 4e51bfe5..b64492cb 100644
--- a/docs/html/.buildinfo
+++ b/docs/html/.buildinfo
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 59f01b51bca09082ff992b52b6e98cfc
+config: 72c039d18ea46f966a2534df3d8861fa
tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/html/_sources/packs/command.rst.txt b/docs/html/_sources/packs/command.rst.txt
index 652c57be..c8e2efc4 100644
--- a/docs/html/_sources/packs/command.rst.txt
+++ b/docs/html/_sources/packs/command.rst.txt
@@ -1,6 +1,6 @@
.. currentmodule:: royalnet.commands
-Adding a Command to the Pack
+Creating a new Command
====================================
A Royalnet Command is a small script that is run whenever a specific message is sent to a Royalnet interface.
@@ -327,7 +327,7 @@ if you want the command to raise an error if the number of results is greater th
More Alchemy
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-You can read more about :mod:`sqlalchemy` at their `website `_.
+You can read more about sqlalchemy at their `website `_.
Calling Events
------------------------------------
@@ -347,4 +347,9 @@ This section is not documented yet.
Running repeating jobs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-This section is not documented yet.
\ No newline at end of file
+This section is not documented yet.
+
+Adding the command to __init__.py
+---------------------------------------------
+
+This section is not documented yet.
diff --git a/docs/html/_sources/packs/pack.rst.txt b/docs/html/_sources/packs/pack.rst.txt
index 1fee19e0..7952d0fa 100644
--- a/docs/html/_sources/packs/pack.rst.txt
+++ b/docs/html/_sources/packs/pack.rst.txt
@@ -1,11 +1,15 @@
-Creating a Royalnet Pack
+.. currentmodule:: royalnet
+
+Royalnet Packs
====================================
-This section is not documented yet.
+A **Royalnet Pack** is a Python `module `_ that can be loaded in a
+Royalnet instance to add more features, such as more commands, more webpages and more events.
.. toctree::
- :maxdepth: 5
+ :maxdepth: 1
+ newpack
command
star
event
diff --git a/docs/html/_static/documentation_options.js b/docs/html/_static/documentation_options.js
index 79964755..ae25aa96 100644
--- a/docs/html/_static/documentation_options.js
+++ b/docs/html/_static/documentation_options.js
@@ -1,6 +1,6 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
- VERSION: '5.4a2',
+ VERSION: '5.6.2',
LANGUAGE: 'None',
COLLAPSE_INDEX: false,
BUILDER: 'html',
diff --git a/docs/html/apireference.html b/docs/html/apireference.html
index 10194e00..9efa7566 100644
--- a/docs/html/apireference.html
+++ b/docs/html/apireference.html
@@ -8,7 +8,7 @@
- API Reference — Royalnet 5.4a2 documentation
+ API Reference — Royalnet 5.6.2 documentation
@@ -60,7 +60,7 @@
@@ -911,14 +922,9 @@ As is the case with the logging module, it will be started on the first request
register_events(events: List[Type[royalnet.commands.event.Event]], pack_cfg: Dict[str, Any])¶
The function generating the Response to a web Request.
-
If it raises an error, the corresponding ExceptionStar will be used to handle the request instead.
+
If it raises an error, the corresponding ExceptionStar will be used to handle the request instead.
@@ -996,7 +1008,7 @@ As is the case with the logging module, it will be started on the first request
class royalnet.constellation.PageStar(interface: royalnet.commands.commandinterface.CommandInterface)¶
A PageStar is a class representing a single route of the website (for example, /api/user/get).
To create a new website route you should create a new class inheriting from this class with a function overriding
-page() and changing the values of path and optionally methods.
An ExceptionStar is a class that handles an Exception raised by another star by returning a different
-response than the one originally intended.
-
The handled exception type is specified in the error.
-
It can also handle standard webserver errors, such as 404NotFound:
-to handle them, set error to an int of the corresponding error code.
-
To create a new exception handler you should create a new class inheriting from this class with a function
-overriding page() and changing the value of error.
First, think of a name for your command.
It’s the name your command will be called with: for example, the “spaghetti” command will be called by typing /spaghetti in chat.
Try to keep the name as short as possible, while staying specific enough so no other command will have the same name.
@@ -482,7 +484,7 @@ if you want the command to raise an error if the number of results is greater th
A Royalnet Pack is a Python module that can be loaded in a
+Royalnet instance to add more features, such as more commands, more webpages and more events.
diff --git a/docs/html/searchindex.js b/docs/html/searchindex.js
index 3e8fcc87..3ffbd743 100644
--- a/docs/html/searchindex.js
+++ b/docs/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["apireference","index","packs/command","packs/event","packs/pack","packs/star","packs/table","randomdiscoveries"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["apireference.rst","index.rst","packs\\command.rst","packs\\event.rst","packs\\pack.rst","packs\\star.rst","packs\\table.rst","randomdiscoveries.rst"],objects:{"royalnet.alchemy":{Alchemy:[0,1,1,""],AlchemyException:[0,3,1,""],TableNotFoundError:[0,3,1,""],table_dfs:[0,4,1,""]},"royalnet.alchemy.Alchemy":{__init__:[0,2,1,""],get:[0,2,1,""],session_acm:[0,2,1,""],session_cm:[0,2,1,""]},"royalnet.bard":{BardError:[0,3,1,""],MultipleFilesError:[0,3,1,""],NotFoundError:[0,3,1,""],YtdlError:[0,3,1,""],YtdlFile:[0,1,1,""],YtdlInfo:[0,1,1,""]},"royalnet.bard.YtdlFile":{__init__:[0,2,1,""],aopen:[0,2,1,""],default_ytdl_args:[0,5,1,""],delete_asap:[0,2,1,""],download_file:[0,2,1,""],from_url:[0,2,1,""],has_info:[0,2,1,""],is_downloaded:[0,2,1,""],retrieve_info:[0,2,1,""],set_ytdlinfo_from_id3_tags:[0,2,1,""]},"royalnet.bard.YtdlInfo":{__init__:[0,2,1,""],from_url:[0,2,1,""]},"royalnet.commands":{Command:[0,1,1,""],CommandArgs:[0,1,1,""],CommandData:[0,1,1,""],CommandError:[0,3,1,""],CommandInterface:[0,1,1,""],ConfigurationError:[0,3,1,""],Event:[0,1,1,""],ExternalError:[0,3,1,""],InvalidInputError:[0,3,1,""],KeyboardKey:[0,1,1,""],ProgramError:[0,3,1,""],UnsupportedError:[0,3,1,""],UserError:[0,3,1,""]},"royalnet.commands.Command":{alchemy:[0,2,1,""],aliases:[0,5,1,""],config:[0,2,1,""],description:[0,5,1,""],loop:[0,2,1,""],name:[0,5,1,""],run:[0,2,1,""],serf:[0,2,1,""],syntax:[0,5,1,""]},"royalnet.commands.CommandArgs":{__getitem__:[0,2,1,""],joined:[0,2,1,""],match:[0,2,1,""],optional:[0,2,1,""]},"royalnet.commands.CommandData":{delete_invoking:[0,2,1,""],get_author:[0,2,1,""],keyboard:[0,2,1,""],reply:[0,2,1,""],session:[0,2,1,""],session_close:[0,2,1,""],session_commit:[0,2,1,""]},"royalnet.commands.CommandInterface":{alchemy:[0,2,1,""],call_herald_event:[0,2,1,""],config:[0,5,1,""],constellation:[0,5,1,""],loop:[0,2,1,""],name:[0,5,1,""],prefix:[0,5,1,""],serf:[0,5,1,""],table:[0,2,1,""]},"royalnet.commands.Event":{"interface":[0,5,1,""],__init__:[0,2,1,""],alchemy:[0,2,1,""],config:[0,2,1,""],loop:[0,2,1,""],name:[0,5,1,""],run:[0,2,1,""],serf:[0,2,1,""]},"royalnet.commands.KeyboardKey":{press:[0,2,1,""]},"royalnet.constellation":{Constellation:[0,1,1,""],ExceptionStar:[0,1,1,""],PageStar:[0,1,1,""],Star:[0,1,1,""],shoot:[0,4,1,""]},"royalnet.constellation.Constellation":{Interface:[0,5,1,""],address:[0,5,1,""],alchemy:[0,5,1,""],events:[0,5,1,""],herald:[0,5,1,""],herald_task:[0,5,1,""],init_herald:[0,2,1,""],interface_factory:[0,2,1,""],loop:[0,5,1,""],network_handler:[0,2,1,""],port:[0,5,1,""],register_events:[0,2,1,""],register_exc_stars:[0,2,1,""],register_page_stars:[0,2,1,""],run_blocking:[0,2,1,""],run_process:[0,2,1,""],running:[0,5,1,""],starlette:[0,5,1,""]},"royalnet.constellation.ExceptionStar":{error:[0,5,1,""]},"royalnet.constellation.PageStar":{methods:[0,5,1,""],path:[0,5,1,""]},"royalnet.constellation.Star":{Session:[0,2,1,""],alchemy:[0,2,1,""],config:[0,2,1,""],constellation:[0,2,1,""],page:[0,2,1,""],session_acm:[0,2,1,""]},"royalnet.herald":{Broadcast:[0,1,1,""],Config:[0,1,1,""],ConnectionClosedError:[0,3,1,""],HeraldError:[0,3,1,""],InvalidServerResponseError:[0,3,1,""],Link:[0,1,1,""],LinkError:[0,3,1,""],Package:[0,1,1,""],Request:[0,1,1,""],Response:[0,1,1,""],ResponseFailure:[0,1,1,""],ResponseSuccess:[0,1,1,""],Server:[0,1,1,""],ServerError:[0,3,1,""]},"royalnet.herald.Broadcast":{from_dict:[0,2,1,""],to_dict:[0,2,1,""]},"royalnet.herald.Config":{copy:[0,2,1,""],from_config:[0,2,1,""],url:[0,2,1,""]},"royalnet.herald.Link":{broadcast:[0,2,1,""],connect:[0,2,1,""],identify:[0,2,1,""],receive:[0,2,1,""],request:[0,2,1,""],run:[0,2,1,""],send:[0,2,1,""]},"royalnet.herald.Package":{__init__:[0,2,1,""],from_dict:[0,2,1,""],from_json_bytes:[0,2,1,""],from_json_string:[0,2,1,""],reply:[0,2,1,""],to_dict:[0,2,1,""],to_json_bytes:[0,2,1,""],to_json_string:[0,2,1,""]},"royalnet.herald.Request":{from_dict:[0,2,1,""],to_dict:[0,2,1,""]},"royalnet.herald.Response":{from_dict:[0,2,1,""],to_dict:[0,2,1,""]},"royalnet.herald.Server":{find_client:[0,2,1,""],find_destination:[0,2,1,""],listener:[0,2,1,""],route_package:[0,2,1,""],run:[0,2,1,""],run_blocking:[0,2,1,""],serve:[0,2,1,""]},"royalnet.serf":{Serf:[0,1,1,""],SerfError:[0,3,1,""]},"royalnet.serf.Serf":{Interface:[0,5,1,""],alchemy:[0,5,1,""],call:[0,2,1,""],commands:[0,5,1,""],events:[0,5,1,""],herald:[0,5,1,""],herald_task:[0,5,1,""],identity_chain:[0,2,1,""],identity_table:[0,5,1,""],init_alchemy:[0,2,1,""],init_herald:[0,2,1,""],interface_factory:[0,2,1,""],interface_name:[0,5,1,""],loop:[0,5,1,""],master_table:[0,5,1,""],network_handler:[0,2,1,""],press:[0,2,1,""],register_commands:[0,2,1,""],register_events:[0,2,1,""],run:[0,2,1,""],run_process:[0,2,1,""]},"royalnet.utils":{MultiLock:[0,1,1,""],andformat:[0,4,1,""],asyncify:[0,4,1,""],from_urluuid:[0,4,1,""],init_logging:[0,4,1,""],init_sentry:[0,4,1,""],numberemojiformat:[0,4,1,""],ordinalformat:[0,4,1,""],sentry_exc:[0,4,1,""],sleep_until:[0,4,1,""],to_urluuid:[0,4,1,""],underscorize:[0,4,1,""],ytdldateformat:[0,4,1,""]},"royalnet.utils.MultiLock":{exclusive:[0,2,1,""],normal:[0,2,1,""]},royalnet:{alchemy:[0,0,0,"-"],backpack:[0,0,0,"-"],bard:[0,0,0,"-"],commands:[0,0,0,"-"],constellation:[0,0,0,"-"],herald:[0,0,0,"-"],serf:[0,0,0,"-"],utils:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","exception","Python exception"],"4":["py","function","Python function"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:exception","4":"py:function","5":"py:attribute"},terms:{"0th":0,"101st":0,"112th":0,"11th":0,"1st":0,"2nd":0,"abstract":0,"byte":0,"case":[0,2],"class":[0,2],"default":[0,2],"final":0,"function":[0,2],"ges\u00f9":0,"import":[0,2],"int":0,"new":[0,1,4],"null":0,"return":[0,2],"short":[0,2],"static":0,"super":2,"true":[0,2],"try":[0,2],"while":[0,2,7],Adding:[1,4],And:2,For:2,Has:0,Not:[0,2],That:0,The:[0,2],Then:2,There:2,These:2,Use:2,Using:[1,4],__getitem__:0,__init__:[0,2],_gone:0,abl:0,about:[0,2],abstracteventloop:0,access:[0,1,4],accur:0,acquir:0,add:0,added:[0,2],adding:[0,2],addit:0,addition:2,address:0,admin:0,aio:0,akin:0,alchemi:[1,4],alchemy_cfg:0,alchemy_easi:0,alchemy_hard:0,alchemyexcept:0,aldent:0,alia:0,alias:0,all:[0,2],allow:[0,2],also:0,altern:0,alwai:2,amount:0,andformat:0,ani:[0,2],anoth:0,anymor:0,anystr:0,aopen:0,api:[1,2],app:0,append:2,arg:[0,2],argument:[0,1,4],around:0,ascend:2,assertionerror:2,async:[0,2],asyncifi:[0,2],asyncio:[0,2],asyncron:[0,2],attribut:2,authent:7,author:0,autocomplet:0,autogener:0,avail:[0,2],avoid:[0,2],await:[0,2],back:2,backpack:[1,2],banana:2,bard:1,barderror:0,base64:0,base:0,becaus:[0,2],been:0,befor:[0,2],begin:2,being:[0,2],between:0,bind:0,blockingli:0,bool:0,bot:[0,1,4,7],both:0,brace:2,bracket:2,brief:2,broadcast:0,bug:2,call:[0,1,4],call_herald_ev:0,callabl:0,callback:0,can:[0,2],cannot:0,carb:2,carbonara:[0,2],cate:0,caus:[0,2],central:0,certain:2,chang:0,channel:0,charact:0,chat:2,check:0,classmethod:0,close:[0,2],code:[0,1,4],collect:0,column:2,come:2,command:[1,4],commandarg:[0,2],commanddata:[0,2],commanderror:[0,2],commandinterfac:0,commit:0,commun:0,comparis:2,complet:0,complex:2,config:[0,2],configur:0,configurationerror:[0,2],connect:[0,2],connectedcli:0,connectionclosederror:0,consid:2,consol:0,constel:1,constellation_cfg:0,contain:[0,2],context:0,convers:0,convert:0,copi:0,coroutin:[0,1,4],correspond:0,could:2,creat:[0,1],curli:2,current:0,dai:0,data:[0,2],databas:[0,1,4],database_uri:0,date:0,datetim:0,debug:2,declar:0,def:2,default_ytdl_arg:0,delet:[0,1,4],delete_asap:0,delete_invok:[0,2],dent:2,depend:2,depth:0,desc:2,descend:2,descript:[0,2],destin:0,destination_conv_id:0,detail:0,develop:7,dict:0,dictionari:0,did:[0,2],differ:[0,2],direct:[1,4],directli:[0,2],discord:[0,1],discordserf:0,discoveri:1,displai:[0,1,4],docstr:0,document:[1,2,3,4,5,6],doe:[0,2],doesn:0,don:[0,2],done:2,down:0,download:0,download_1_terabyte_of_spaghetti:2,download_fil:0,dure:0,each:0,easili:0,effect:2,either:0,element:[0,2],ellipsi:0,els:2,emoji:[0,2],enabl:0,encod:0,encount:0,end:0,ending_t:0,engin:[0,2],english:0,enough:[0,2],epic:0,epoch:0,equival:2,error:[0,1,4],error_if_non:0,error_if_unavail:[0,2],establish:2,even:0,event:[0,1,4],event_nam:0,everi:[0,2],exact:[0,2],exampl:[0,2],exc:0,exc_star:0,except:[0,2],exceptionstar:0,exclus:0,execut:[0,2],executor:0,exist:[0,2],exit:0,expect:2,explain:0,express:[1,4],ext:0,extern:[0,2],externalerror:[0,2],extra:0,extra_info:0,extract:0,extract_info:0,eyed3:0,facilit:2,factor:0,fail:[0,7],fals:0,featur:0,fetch:[0,1,4],ffmpeg_python:0,field:2,file:[0,2],filenam:0,filter:[1,4],find:0,find_client:0,find_destin:0,finish:2,first:[0,2],flag:0,form:0,format:0,found:[0,2,7],friendli:0,from:[0,2],from_config:0,from_dict:0,from_json_byt:0,from_json_str:0,from_url:0,from_urluuid:0,full:[1,4],gener:0,get:[0,2],get_author:0,github:1,going:0,gone:0,greater:2,group:[0,2],handl:0,handler:0,happen:0,has:[0,2],has_info:0,have:[0,2],heartbeat:7,herald:1,herald_cfg:0,herald_task:0,heralderror:0,here:[2,7],how:0,http:0,ident:0,identifi:0,identity_chain:0,identity_t:0,ignor:2,ignoreerror:0,imag:2,implement:0,includ:2,index:[0,1],info:0,inherit:[0,2],init_alchemi:0,init_herald:0,init_log:0,init_sentri:0,initi:[0,1,4],input:0,insid:[0,2],instal:0,instanc:[0,2],instanti:0,instead:[0,2],instruct:0,intend:0,interact:2,interfac:[0,2],interface_factori:0,interface_nam:0,internet:0,invalid:[0,2],invalidinputerror:[0,2],invalidserverresponseerror:0,invok:[0,1,4],is_download:0,is_open:2,isn:[0,2],itali:2,item:0,iter:0,its:0,job:[1,4],join:[0,2],json:0,jsonabl:0,jsonrespons:0,just:2,kappa:0,keep:2,kei:0,keyboard:[0,1,4],keyboardkei:0,keyword:[0,2],kind:2,kitchen:2,kwarg:0,last:0,later:2,less:0,level:0,like:[0,2],line:0,link:0,link_typ:0,linkerror:0,list:[0,2],listen:0,lock:0,log:0,logging_cfg:0,look:2,loop:0,made:0,mai:2,main:0,maintain:0,make:2,mallllco:0,manag:0,mani:0,markup:0,master:0,master_t:0,match:[0,2],mean:[0,2],meantim:2,media:0,member:2,mention:2,messag:[0,1,4],metadata:2,method:[0,2],middl:0,minimum:[0,2],misconfigur:2,miss:[0,2],mistak:2,modul:0,month:0,more:[0,1,4],msg_type:0,multilock:0,multipl:[0,2],multiplefileserror:0,multiprocess:0,music:0,must:0,name:[0,2],network:0,network_handl:0,next:2,nid:0,no_warn:0,nobodi:0,node:0,non:0,none:[0,2],noplaylist:0,normal:[0,2],notfounderror:0,noth:[0,2],notic:2,notimpl:0,now:2,number:[0,2],numberemojiformat:0,numer:0,object:[0,2],onc:[0,2],one:[0,2],one_or_non:2,ones:2,onli:[0,2],open:0,oper:[1,4],option:[0,1,4],optional_arg:0,order:[1,4],order_bi:2,ordin:0,ordinal_numer:0,ordinalformat:0,org:0,origin:0,orm:[0,2],other:[0,2],otherwis:2,out:7,outtmpl:0,over:0,overrid:[0,2],pack:[0,1],pack_cfg:0,packag:0,packet:0,packs_cfg:0,page:0,page_star:0,pagestar:0,paltri:0,paramet:[0,2],part:[0,2],particularli:0,pass:[0,2],pasta:0,path:0,pattern:[0,2],ping:2,pingcommand:2,pip:0,plai:2,pleas:0,pong:2,port:0,possibl:[0,2],post:0,postgresql:2,prank:0,prefix:0,prepar:0,present:2,press:0,previou:2,previous:2,probabl:0,problem:[0,2],procedur:0,process:0,program:[0,2],programerror:[0,2],project:0,properli:0,properti:0,proto:0,provid:0,psycopg2:0,put:0,pypi:0,python:2,queri:[1,4],quiet:0,rais:[0,1,4],random:[0,1],rbt:2,read:[0,2],readi:2,reason:7,receiv:[0,2],reciev:0,recogn:2,recreat:0,refer:1,regex:0,regist:0,register_command:0,register_ev:0,register_exc_star:0,register_page_star:0,regular:[1,4],relat:0,relationship:0,rememb:2,remot:0,render:0,repeat:[1,4],replac:0,repli:[0,2],report:0,repres:0,represent:0,request:[0,2],request_handl:0,requestedpasta:2,requir:[0,2],require_at_least:[0,2],required_arg:0,resourc:0,respect:2,respons:0,responsefailur:0,responsesuccess:0,rest:[0,2],result:[0,1,4],retriev:0,retrieve_for_url:0,retrieve_info:0,right_now:2,role:2,rout:0,route_packag:0,row:[0,2],royalnet:[0,2],run:[0,1,4],run_block:0,run_process:0,safe:0,same:2,schema:0,script:2,search:0,second:0,secret:0,section:[0,2,3,4,5,6],secur:0,select:0,self:[0,2],send:[0,2],sensei:0,sent:[0,2],sentri:0,sentry_cfg:0,sentry_exc:0,separ:[0,2],sequenc:0,serf:1,serferror:0,serv:0,server:0,servererror:0,session:[0,2],session_acm:0,session_clos:0,session_cm:0,session_commit:0,set:[0,2],set_ytdlinfo_from_id3_tag:0,shoot:0,shortcut:0,should:[0,2],shouldn:0,side:2,simpl:2,simultan:0,singl:[0,2],sleep:[0,2],sleep_until:0,slow:[1,4],small:[0,2],some:[0,2,7],someth:[0,2],somewher:0,soon:0,sort:2,sourc:0,source_conv_id:0,space:[0,2],spaggia:0,spaghetti:[0,2],spaghetticommand:2,special:2,specif:[0,2],specifi:[0,2],sphinx:0,sql:0,sqlalchemi:[0,2],squar:2,stai:[0,2],standard:0,star:[0,1,4],starlett:0,start:[0,2],starting_t:0,statement:0,steffo:0,stop:[2,7],str:[0,2],string:[0,1,4],stuff:0,subclass:[0,2],submodul:0,subpackag:0,success:0,support:[0,2],syntax:[0,2],tabl:[0,1,2,4],table_df:0,tablenotfounderror:0,take:2,target:0,task:0,telegram:[0,2],telegramserf:0,tell:2,text:0,than:[0,2],thei:[0,2],them:[0,2],thi:[0,2,3,4,5,6],thing:[2,7],think:2,thought:2,thread:0,through:[0,2],time:[0,2,7],titl:0,to_dict:0,to_json_byt:0,to_json_str:0,to_urluuid:0,toml:2,too:[0,2],tri:2,trigger:0,tupl:[0,2],two:0,type:[0,2],unavail:2,underscor:0,undescrib:0,undocu:1,unexpectedli:0,unicod:0,union:[0,2],unsupportederror:[0,2],until:[0,2],uri:0,url:0,use:[0,2],used:[0,2],useful:0,user:[0,2],usererror:[0,2],usernam:2,uses:0,using:[0,2],usual:0,utf:0,util:[1,2],uuid:0,uvicorn:0,valu:[0,2],valueerror:0,video:0,viktya:0,wai:2,want:[0,2],wasn:[0,2],web:0,webpag:0,webserv:0,websit:[0,2],websocket:[0,1],websocketserverprotocol:0,weird:0,welcom:1,went:0,were:[0,2,7],what:[0,2],when:[0,2],whenev:2,where:0,which:[0,2],wiki:0,wikipedia:0,won:[0,2],word:0,work:[0,2],wrap:2,wrapper:0,wrong:[0,2],wrong_____:0,year:0,yet:[0,2,3,4,5,6],you:[0,2],your:2,youtube_dl:0,youtubedl:0,ytdl_arg:0,ytdldateformat:0,ytdlerror:0,ytdlfile:0,ytdlinfo:0,yyyi:0,yyyymmdd:0},titles:["API Reference","Royalnet","Adding a Command to the Pack","Using Events","Creating a Royalnet Pack","Adding a Star to the Pack","Using Tables and databases","Random discoveries"],titleterms:{"new":2,Adding:[2,5],Using:[2,3,6],access:2,alchemi:[0,2],api:0,argument:2,backpack:0,bard:0,bot:2,call:2,code:[2,7],command:[0,2],constel:0,coroutin:2,creat:[2,4],databas:[2,6],delet:2,direct:2,discord:7,discoveri:7,displai:2,error:[2,7],event:[2,3],express:2,fetch:2,filter:2,full:2,herald:0,initi:2,invok:2,job:2,keyboard:2,link:1,messag:2,more:2,oper:2,option:2,order:2,pack:[2,4,5],queri:2,rais:2,random:7,refer:0,regular:2,repeat:2,result:2,royalnet:[1,4],run:2,serf:0,slow:2,some:1,star:5,string:2,tabl:6,undocu:7,useful:1,util:0,websocket:7}})
\ No newline at end of file
+Search.setIndex({docnames:["apireference","index","packs/command","packs/event","packs/newpack","packs/pack","packs/star","packs/table","randomdiscoveries"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["apireference.rst","index.rst","packs\\command.rst","packs\\event.rst","packs\\newpack.rst","packs\\pack.rst","packs\\star.rst","packs\\table.rst","randomdiscoveries.rst"],objects:{"royalnet.alchemy":{Alchemy:[0,1,1,""],AlchemyException:[0,3,1,""],TableNotFoundError:[0,3,1,""],table_dfs:[0,4,1,""]},"royalnet.alchemy.Alchemy":{__init__:[0,2,1,""],get:[0,2,1,""],session_acm:[0,2,1,""],session_cm:[0,2,1,""]},"royalnet.bard":{BardError:[0,3,1,""],MultipleFilesError:[0,3,1,""],NotFoundError:[0,3,1,""],YtdlError:[0,3,1,""],YtdlFile:[0,1,1,""],YtdlInfo:[0,1,1,""]},"royalnet.bard.YtdlFile":{__init__:[0,2,1,""],aopen:[0,2,1,""],default_ytdl_args:[0,5,1,""],delete_asap:[0,2,1,""],download_file:[0,2,1,""],from_url:[0,2,1,""],has_info:[0,2,1,""],is_downloaded:[0,2,1,""],retrieve_info:[0,2,1,""],set_ytdlinfo_from_id3_tags:[0,2,1,""]},"royalnet.bard.YtdlInfo":{__init__:[0,2,1,""],from_url:[0,2,1,""]},"royalnet.commands":{Command:[0,1,1,""],CommandArgs:[0,1,1,""],CommandData:[0,1,1,""],CommandError:[0,3,1,""],CommandInterface:[0,1,1,""],ConfigurationError:[0,3,1,""],Event:[0,1,1,""],ExternalError:[0,3,1,""],InvalidInputError:[0,3,1,""],KeyboardKey:[0,1,1,""],ProgramError:[0,3,1,""],UnsupportedError:[0,3,1,""],UserError:[0,3,1,""]},"royalnet.commands.Command":{alchemy:[0,2,1,""],aliases:[0,5,1,""],config:[0,2,1,""],description:[0,5,1,""],loop:[0,2,1,""],name:[0,5,1,""],run:[0,2,1,""],serf:[0,2,1,""],syntax:[0,5,1,""]},"royalnet.commands.CommandArgs":{__getitem__:[0,2,1,""],joined:[0,2,1,""],match:[0,2,1,""],optional:[0,2,1,""]},"royalnet.commands.CommandData":{delete_invoking:[0,2,1,""],find_user:[0,2,1,""],get_author:[0,2,1,""],keyboard:[0,2,1,""],reply:[0,2,1,""],session:[0,2,1,""],session_close:[0,2,1,""],session_commit:[0,2,1,""]},"royalnet.commands.CommandInterface":{alchemy:[0,2,1,""],call_herald_event:[0,2,1,""],config:[0,5,1,""],constellation:[0,5,1,""],loop:[0,2,1,""],name:[0,5,1,""],prefix:[0,5,1,""],serf:[0,5,1,""],table:[0,2,1,""]},"royalnet.commands.Event":{"interface":[0,5,1,""],__init__:[0,2,1,""],alchemy:[0,2,1,""],config:[0,2,1,""],loop:[0,2,1,""],name:[0,5,1,""],run:[0,2,1,""],serf:[0,2,1,""]},"royalnet.commands.KeyboardKey":{press:[0,2,1,""]},"royalnet.constellation":{Constellation:[0,1,1,""],PageStar:[0,1,1,""],Star:[0,1,1,""]},"royalnet.constellation.Constellation":{Interface:[0,5,1,""],address:[0,5,1,""],alchemy:[0,5,1,""],events:[0,5,1,""],herald:[0,5,1,""],herald_task:[0,5,1,""],init_herald:[0,2,1,""],interface_factory:[0,2,1,""],loop:[0,5,1,""],network_handler:[0,2,1,""],port:[0,5,1,""],register_events:[0,2,1,""],register_page_stars:[0,2,1,""],run_blocking:[0,2,1,""],run_process:[0,2,1,""],running:[0,5,1,""],starlette:[0,5,1,""],stars:[0,5,1,""]},"royalnet.constellation.PageStar":{methods:[0,5,1,""],path:[0,5,1,""]},"royalnet.constellation.Star":{Session:[0,2,1,""],alchemy:[0,2,1,""],config:[0,2,1,""],constellation:[0,2,1,""],page:[0,2,1,""],session_acm:[0,2,1,""]},"royalnet.herald":{Broadcast:[0,1,1,""],Config:[0,1,1,""],ConnectionClosedError:[0,3,1,""],HeraldError:[0,3,1,""],InvalidServerResponseError:[0,3,1,""],Link:[0,1,1,""],LinkError:[0,3,1,""],Package:[0,1,1,""],Request:[0,1,1,""],Response:[0,1,1,""],ResponseFailure:[0,1,1,""],ResponseSuccess:[0,1,1,""],Server:[0,1,1,""],ServerError:[0,3,1,""]},"royalnet.herald.Broadcast":{from_dict:[0,2,1,""],to_dict:[0,2,1,""]},"royalnet.herald.Config":{copy:[0,2,1,""],from_config:[0,2,1,""],url:[0,2,1,""]},"royalnet.herald.Link":{broadcast:[0,2,1,""],connect:[0,2,1,""],identify:[0,2,1,""],receive:[0,2,1,""],request:[0,2,1,""],run:[0,2,1,""],send:[0,2,1,""]},"royalnet.herald.Package":{__init__:[0,2,1,""],from_dict:[0,2,1,""],from_json_bytes:[0,2,1,""],from_json_string:[0,2,1,""],reply:[0,2,1,""],to_dict:[0,2,1,""],to_json_bytes:[0,2,1,""],to_json_string:[0,2,1,""]},"royalnet.herald.Request":{from_dict:[0,2,1,""],to_dict:[0,2,1,""]},"royalnet.herald.Response":{from_dict:[0,2,1,""],to_dict:[0,2,1,""]},"royalnet.herald.Server":{find_client:[0,2,1,""],find_destination:[0,2,1,""],listener:[0,2,1,""],route_package:[0,2,1,""],run:[0,2,1,""],run_blocking:[0,2,1,""],serve:[0,2,1,""]},"royalnet.serf":{Serf:[0,1,1,""],SerfError:[0,3,1,""]},"royalnet.serf.Serf":{Interface:[0,5,1,""],alchemy:[0,5,1,""],call:[0,2,1,""],commands:[0,5,1,""],events:[0,5,1,""],herald:[0,5,1,""],herald_task:[0,5,1,""],identity_chain:[0,2,1,""],identity_table:[0,5,1,""],init_alchemy:[0,2,1,""],init_herald:[0,2,1,""],interface_factory:[0,2,1,""],interface_name:[0,5,1,""],loop:[0,5,1,""],master_table:[0,5,1,""],network_handler:[0,2,1,""],press:[0,2,1,""],register_commands:[0,2,1,""],register_events:[0,2,1,""],run:[0,2,1,""],run_process:[0,2,1,""]},"royalnet.utils":{MultiLock:[0,1,1,""],andformat:[0,4,1,""],asyncify:[0,4,1,""],from_urluuid:[0,4,1,""],init_logging:[0,4,1,""],init_sentry:[0,4,1,""],numberemojiformat:[0,4,1,""],ordinalformat:[0,4,1,""],sentry_exc:[0,4,1,""],sleep_until:[0,4,1,""],to_urluuid:[0,4,1,""],underscorize:[0,4,1,""],ytdldateformat:[0,4,1,""]},"royalnet.utils.MultiLock":{exclusive:[0,2,1,""],normal:[0,2,1,""]},royalnet:{alchemy:[0,0,0,"-"],backpack:[0,0,0,"-"],bard:[0,0,0,"-"],commands:[0,0,0,"-"],constellation:[0,0,0,"-"],herald:[0,0,0,"-"],serf:[0,0,0,"-"],utils:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","exception","Python exception"],"4":["py","function","Python function"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:exception","4":"py:function","5":"py:attribute"},terms:{"0th":0,"101st":0,"112th":0,"11th":0,"1st":0,"2nd":0,"abstract":0,"byte":0,"case":[0,2],"class":[0,2,4],"default":[0,2],"enum":4,"final":0,"function":[0,2,4],"ges\u00f9":0,"import":[0,2,4],"int":0,"new":[0,5],"null":0,"return":[0,2],"short":[0,2],"static":0,"super":2,"true":[0,2],"try":[0,2],"while":[0,2,4,8],Adding:[4,5],And:2,For:2,Has:0,Its:4,Not:[0,2],That:0,The:[0,2],Then:2,There:2,These:2,Use:2,Using:[4,5],__getitem__:0,__init__:0,_gone:0,abl:0,about:[0,2,4],abstracteventloop:0,access:0,accur:0,acquir:0,add:[0,4,5],added:[0,2],adding:[0,2],addit:0,addition:2,address:0,admin:0,after:4,aio:0,akin:0,alchemi:4,alchemy_cfg:0,alchemy_easi:0,alchemy_hard:0,alchemyexcept:0,aldent:0,alia:0,alias:0,all:[0,2,4],allow:[0,2],also:0,altern:0,alwai:2,amount:0,andformat:0,ani:[0,2],anoth:0,anymor:0,anystr:0,anyth:4,anywher:4,aopen:0,api:[1,2],app:0,append:2,arg:[0,2],argument:0,around:0,ascend:2,assertionerror:2,async:[0,2],asyncifi:[0,2],asyncio:[0,2],asyncron:[0,2],attribut:2,authent:8,author:0,autocomplet:0,autogener:0,avail:[0,2],avoid:[0,2],await:[0,2],back:2,backpack:2,banana:2,barderror:0,base64:0,base:[0,4],becaus:[0,2],been:0,befor:[0,2,4],begin:2,being:[0,2],between:0,bind:0,blockingli:0,bool:0,bot:[0,8],both:0,brace:2,bracket:2,brief:2,broadcast:0,bug:2,build:4,call:[0,4],call_herald_ev:0,callabl:0,callback:0,can:[0,2,4,5],cannot:0,carb:2,carbonara:[0,2],cate:0,caus:[0,2],central:0,certain:2,chang:4,channel:0,charact:0,chat:2,check:0,choos:4,circular:4,classmethod:0,clone:4,close:[0,2],code:[0,4],collect:0,column:2,come:2,command:5,commandarg:[0,2],commanddata:[0,2],commanderror:[0,2],commandinterfac:0,comment:4,commit:0,commun:0,comparis:2,compat:4,complet:0,complex:2,config:[0,2],configur:0,configurationerror:[0,2],connect:[0,2],connectedcli:0,connectionclosederror:0,consid:2,consol:0,constellation_cfg:0,contain:[0,2,4],content:4,context:0,convers:0,convert:0,copi:0,coroutin:0,correspond:0,could:2,creat:[0,5],curli:2,current:0,custom:4,dai:0,data:[0,2],databas:[0,4,5],database_uri:0,date:0,datetim:0,debug:2,declar:0,declarativemeta:0,def:2,default_ytdl_arg:0,delet:0,delete_asap:0,delete_invok:[0,2],dent:2,depend:2,depth:0,desc:2,descend:2,descript:[0,2],destin:0,destination_conv_id:0,detail:0,develop:[4,8],dict:0,dictionari:0,did:[0,2],differ:[0,2],directli:[0,2],discord:0,discordserf:0,discoveri:1,displai:0,docstr:0,document:[1,2,3,4,6,7],doe:[0,2],doesn:0,don:[0,2],done:2,down:0,download:0,download_1_terabyte_of_spaghetti:2,download_fil:0,dure:0,each:0,easili:0,edit:4,effect:2,either:0,element:[0,2],ellipsi:0,els:[2,4],emoji:[0,2],enabl:0,encod:0,encount:0,end:0,ending_t:0,engin:[0,2],english:0,enough:[0,2],epic:0,epoch:0,equival:2,error:0,error_if_non:0,error_if_unavail:[0,2],establish:2,even:0,event:[0,5],event_nam:0,everi:[0,2],everyth:4,exact:[0,2],exampl:[0,2],exc:0,except:[0,2],exceptionstar:0,exclus:0,execut:[0,2],executor:0,exist:[0,2],exit:0,expect:2,explain:0,ext:0,extern:[0,2],externalerror:[0,2],extra:0,extra_info:0,extract:0,extract_info:0,eyed3:0,facilit:2,factor:0,fail:[0,8],fals:0,featur:[0,5],fetch:0,ffmpeg_python:0,field:[2,4],file:[0,2,4],filenam:0,find:0,find_client:0,find_destin:0,find_us:0,finish:[2,4],first:[0,2],flag:0,follow:4,forbidden:4,form:0,format:0,found:[0,2,8],friendli:0,from:[0,2,4],from_config:0,from_dict:0,from_json_byt:0,from_json_str:0,from_url:0,from_urluuid:0,gener:0,get:[0,2],get_author:0,github:1,going:0,gone:0,greater:2,group:[0,2],handl:0,handler:0,happen:0,has:[0,2],has_info:0,have:[0,2,4],heartbeat:8,herald_cfg:0,herald_task:0,heralderror:0,here:[2,4,8],how:[0,4],howev:4,http:0,ident:0,identifi:0,identity_chain:0,identity_t:0,ignor:2,ignoreerror:0,imag:2,implement:0,includ:[2,4],index:[0,1],info:0,inform:4,inherit:[0,2],init_alchemi:0,init_herald:0,init_log:0,init_sentri:0,initi:0,input:0,insert:4,insid:[0,2],instal:[0,4],instanc:[0,2,4,5],instanti:0,instead:[0,2],instruct:[0,4],interact:2,interfac:[0,2],interface_factori:0,interface_nam:0,internet:0,invalid:[0,2],invalidinputerror:[0,2],invalidserverresponseerror:0,invok:0,is_download:0,is_open:2,isn:[0,2],itali:2,item:0,iter:0,its:[0,4],join:[0,2],json:0,jsonabl:0,just:2,kappa:0,keep:2,kei:0,keyboard:0,keyboardkei:0,keyword:[0,2],kind:2,kitchen:2,kwarg:0,last:0,later:2,learn:4,less:0,level:0,like:[0,2],line:0,link:0,link_typ:0,linkerror:0,list:[0,2],listen:0,load:5,lock:0,log:0,logging_cfg:0,look:2,loop:0,made:0,mai:2,main:0,maintain:0,make:2,mallllco:0,manag:0,mani:0,markup:0,master:0,master_t:0,match:[0,2],mean:[0,2],meantim:2,media:0,member:2,mention:2,messag:0,metadata:2,method:[0,2],middl:0,minimum:[0,2],misconfigur:2,miss:[0,2],mistak:2,modul:[0,4,5],month:0,more:[0,5],msg_type:0,multilock:0,multipl:[0,2],multiplefileserror:0,multiprocess:0,music:0,must:0,name:[0,2,4],need:4,network:0,network_handl:0,next:2,nid:0,no_warn:0,nobodi:0,node:0,non:0,none:[0,2],noplaylist:0,normal:[0,2],note:4,notfounderror:0,noth:[0,2],notic:2,notimpl:0,now:2,number:[0,2,4],numberemojiformat:0,numer:0,object:[0,2],onc:[0,2],one:[0,2],one_or_non:2,ones:2,onli:[0,2],open:0,option:0,optional_arg:0,order_bi:2,ordin:0,ordinal_numer:0,ordinalformat:0,org:0,orm:[0,2],other:[0,2,4],otherwis:2,out:8,outtmpl:0,over:0,overrid:[0,2],pack:[0,1,2],pack_cfg:0,packag:0,packet:0,packs_cfg:0,page:[0,4],page_star:0,pagestar:[0,4],paltri:0,paramet:[0,2],part:[0,2],particularli:0,pass:[0,2],pasta:0,pastapack:4,path:0,pattern:[0,2],ping:2,pingcommand:2,pip:0,plai:2,pleas:[0,4],poetri:4,pong:2,port:0,possibl:[0,2],post:0,postgresql:2,prank:0,prefix:0,prepar:0,present:2,press:0,previou:2,previous:2,probabl:0,problem:[0,2],procedur:[0,4],process:0,program:[0,2],programerror:[0,2],project:[0,4],properli:0,properti:[0,4],proto:0,provid:0,psycopg2:0,put:0,pypi:[0,4],python:[2,4,5],quiet:0,rais:0,random:[0,1],rbt:2,read:[0,2,4],readi:2,reason:8,receiv:[0,2],reciev:0,recogn:2,recreat:0,refer:1,regex:0,regist:0,register_command:0,register_ev:0,register_page_star:0,relat:0,relationship:0,rememb:[2,4],remot:[0,4],renam:4,render:0,replac:0,repli:[0,2],report:0,repres:0,represent:0,request:[0,2],request_handl:0,requestedpasta:2,requir:[0,2],require_at_least:[0,2],required_arg:0,resourc:0,respect:2,respons:0,responsefailur:0,responsesuccess:0,rest:[0,2,4],result:0,retriev:0,retrieve_for_url:0,retrieve_info:0,right_now:2,role:2,rout:[0,4],route_packag:0,row:[0,2],royalnet:[0,2,4],run:0,run_block:0,run_process:0,safe:0,same:[2,4],schema:0,script:2,search:0,second:0,secret:0,section:[0,2,3,4,6,7],secur:0,select:0,self:[0,2],semant:4,send:[0,2],sensei:0,sent:[0,2],sentri:0,sentry_cfg:0,sentry_exc:0,separ:[0,2],sequenc:0,serferror:0,serv:0,server:0,servererror:0,session:[0,2],session_acm:0,session_clos:0,session_cm:0,session_commit:0,set:[0,2,4],set_ytdlinfo_from_id3_tag:0,shortcut:0,should:[0,2,4],shouldn:0,side:2,simpl:2,simultan:0,singl:[0,2],six:4,sleep:[0,2],sleep_until:0,small:[0,2],some:[0,2,8],someth:[0,2],somewher:0,soon:0,sort:2,sourc:[0,4],source_conv_id:0,space:[0,2],spaggia:0,spaghetti:[0,2],spaghetticommand:2,special:2,specif:[0,2],specifi:[0,2],sphinx:0,sql:[0,4],sqlalchemi:[0,2,4],squar:2,stai:[0,2],star:[0,5],starlett:0,start:[0,2],starting_t:0,statement:0,steffo:0,stop:[2,8],str:[0,2],string:0,stuff:0,subclass:2,submodul:0,subpackag:0,success:0,support:[0,2],syntax:[0,2],tabl:[0,2,5],table_df:0,tablenotfounderror:0,take:2,target:0,task:0,telegram:[0,2],telegramserf:0,tell:2,templat:4,text:0,than:[0,2],thei:[0,2],them:[0,2,4],thi:[0,2,3,4,6,7],thing:[2,8],think:2,thought:2,thread:0,through:[0,2],time:[0,2,8],titl:0,to_dict:0,to_json_byt:0,to_json_str:0,to_urluuid:0,todo:4,toml:2,too:[0,2,4],tool:4,tri:2,trigger:0,tupl:[0,2],two:0,type:[0,2],unavail:2,underscor:0,undescrib:0,unexpectedli:0,unicod:0,union:[0,2],unsupportederror:[0,2],until:[0,2],uri:0,url:0,use:[0,2,4],used:[0,2,4],useful:0,user:[0,2],usererror:[0,2],usernam:2,uses:[0,4],using:[0,2],usual:0,utf:0,util:2,uuid:0,uvicorn:0,valu:[0,2,4],video:0,viktya:0,wai:2,want:[0,2],wasn:[0,2],web:0,webpag:[0,5],webserv:[0,4],websit:[0,2],websocket:0,websocketserverprotocol:0,weird:0,welcom:1,went:0,were:[0,2,8],what:[0,2],when:[0,2],whenev:2,where:0,which:[0,2],wiki:0,wikipedia:0,without:4,won:[0,2],word:0,work:[0,2],workspac:4,wrap:2,wrapper:0,wrong:[0,2],wrong_____:0,year:0,yet:[0,2,3,4,6,7],you:[0,2,4],your:[2,4],youtube_dl:0,youtubedl:0,ytdl_arg:0,ytdldateformat:0,ytdlerror:0,ytdlfile:0,ytdlinfo:0,yyyi:0,yyyymmdd:0},titles:["API Reference","Royalnet","Creating a new Command","Using Events","Creating a new Pack","Royalnet Packs","Adding a Star to the Pack","Using Tables and databases","Random discoveries"],titleterms:{"new":[2,4],Adding:[2,6],The:4,Using:[2,3,7],__init__:2,access:2,alchemi:[0,2],api:0,argument:2,backpack:0,bard:0,bot:2,call:2,code:[2,8],command:[0,2,4],constel:0,coroutin:2,creat:[2,4],databas:[2,7],delet:2,direct:2,discord:8,discoveri:8,displai:2,error:[2,8],event:[2,3,4],examplepack:4,express:2,fetch:2,filter:2,folder:4,full:2,herald:0,initi:2,invok:2,job:2,keyboard:2,link:1,messag:2,more:2,oper:2,option:2,order:2,pack:[4,5,6],prerequisit:4,publish:4,pyproject:4,queri:2,rais:2,random:8,refer:0,regular:2,repeat:2,repositori:4,result:2,royalnet:[1,5],run:2,serf:0,slow:2,some:1,star:[4,6],string:2,tabl:[4,7],toml:4,type:4,undocu:8,useful:1,util:[0,4],version:4,websocket:8}})
\ No newline at end of file
diff --git a/docs_source/index.rst b/docs_source/index.rst
index 1e5a928f..4e36cbb3 100644
--- a/docs_source/index.rst
+++ b/docs_source/index.rst
@@ -4,7 +4,7 @@ Royalnet
Welcome to the documentation of Royalnet!
.. toctree::
- :maxdepth: 5
+ :maxdepth: 1
packs/pack
randomdiscoveries
diff --git a/docs_source/packs/command.rst b/docs_source/packs/command.rst
index 652c57be..c8e2efc4 100644
--- a/docs_source/packs/command.rst
+++ b/docs_source/packs/command.rst
@@ -1,6 +1,6 @@
.. currentmodule:: royalnet.commands
-Adding a Command to the Pack
+Creating a new Command
====================================
A Royalnet Command is a small script that is run whenever a specific message is sent to a Royalnet interface.
@@ -327,7 +327,7 @@ if you want the command to raise an error if the number of results is greater th
More Alchemy
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-You can read more about :mod:`sqlalchemy` at their `website `_.
+You can read more about sqlalchemy at their `website `_.
Calling Events
------------------------------------
@@ -347,4 +347,9 @@ This section is not documented yet.
Running repeating jobs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-This section is not documented yet.
\ No newline at end of file
+This section is not documented yet.
+
+Adding the command to __init__.py
+---------------------------------------------
+
+This section is not documented yet.
diff --git a/docs_source/packs/newpack.rst b/docs_source/packs/newpack.rst
new file mode 100644
index 00000000..d2bef3d6
--- /dev/null
+++ b/docs_source/packs/newpack.rst
@@ -0,0 +1,109 @@
+Creating a new Pack
+====================================
+
+Prerequisites
+------------------------------------
+
+You'll need to have `Python 3.8 `_ and `poetry `_
+to develop Royalnet Packs.
+
+Creating the repository
+------------------------------------
+
+To create a new pack, create a new repository based on the `Royalnet Pack template `_
+and clone it to your workspace.
+
+pyproject.toml
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``pyproject.toml`` file contains information about your Python project that will be read by ``poetry`` while building
+the pack and publishing it to PyPI.
+
+Choose a name for your Pack and set it in the ``tool.property.name`` field: ::
+
+ [tool.poetry]
+ # TODO: Insert here your Pack name!
+ name = "pastapack"
+ # ...
+
+Follow the instructions in the other ``# TODO`` comments to finish editing the file.
+
+examplepack
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``examplepack`` folder contains the source code of your pack, and should be renamed to the name you set in the ``pyproject.toml`` file.
+
+It should contain a ``version.py`` file and six folders: ::
+
+ examplepack
+ ├── commands
+ ├── events
+ ├── stars
+ ├── tables
+ ├── types
+ ├── utils
+ └── version.py
+
+version.py
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``version.py`` file contains the version number of your pack.
+
+If you changed the ``version`` field in the ``pyproject.toml`` file, change the value of ``semantic`` in ``version.py`` to the same value.
+
+Remember to use `semantic versioning `_! ::
+
+ semantic = "1.0.0"
+
+The commands folder
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The commands folder should contain all commands that your Pack will add to the Royalnet instances it is installed in.
+
+To learn how to create a new :class:`~commands.Command`, read the :doc:`command` page.
+
+The events folder
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The events folder should contain all events (remote procedure calls) that your Pack will add to the Royalnet instances it is installed in.
+
+To learn how to create a new :class:`~commands.Event`, read the :doc:`event` page.
+
+The stars folder
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The stars folder should contain all stars (webserver routes) that your Pack will add to the Royalnet instances it is installed in.
+
+To learn how to create a new :class:`~constellation.PageStar`, read the :doc:`star` page.
+
+The tables folder
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The tables folder should contain all Alchemy tables (SQLAlchemy-compatible SQL tables) that your Pack will add to the Royalnet instances it is installed in.
+
+To learn how to create a new table, read the :doc:`table` page.
+
+The utils folder
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The utils folder should contain the utility functions and classes that your Pack uses.
+
+Its contents are imported **before** the commands, events and stars but **after** the tables, so **you can't import them** in the files contained in the ``tables`` folder, or you will create a `circular import `_!
+
+Files in this folder are **forbidden from importing modules** from the ``commands``, ``events`` and ``stars`` folders, as that will create a circular import too.
+
+The types folder
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The types folder should contain the enums and custom types that are used in your tables.
+
+Please note that the contents of this folder are imported **before** everything else in the pack.
+
+Its contents **can be imported anywhere** in the Pack, including the ``tables`` folder, without creating a circular import.
+
+However, its files are **forbidden from importing anything else** from the rest of the pack!
+
+Publishing the pack
+------------------------------------
+
+This section is not documented yet.
diff --git a/docs_source/packs/pack.rst b/docs_source/packs/pack.rst
index 1fee19e0..7952d0fa 100644
--- a/docs_source/packs/pack.rst
+++ b/docs_source/packs/pack.rst
@@ -1,11 +1,15 @@
-Creating a Royalnet Pack
+.. currentmodule:: royalnet
+
+Royalnet Packs
====================================
-This section is not documented yet.
+A **Royalnet Pack** is a Python `module `_ that can be loaded in a
+Royalnet instance to add more features, such as more commands, more webpages and more events.
.. toctree::
- :maxdepth: 5
+ :maxdepth: 1
+ newpack
command
star
event