diff --git a/docs/doctrees/bots.doctree b/docs/doctrees/bots.doctree index 373f899b..7684ecf7 100644 Binary files a/docs/doctrees/bots.doctree and b/docs/doctrees/bots.doctree differ diff --git a/docs/doctrees/commands.doctree b/docs/doctrees/commands.doctree index aa7156d2..a51b5c44 100644 Binary files a/docs/doctrees/commands.doctree and b/docs/doctrees/commands.doctree differ diff --git a/docs/doctrees/database.doctree b/docs/doctrees/database.doctree index 7882c6f9..158fb9fd 100644 Binary files a/docs/doctrees/database.doctree and b/docs/doctrees/database.doctree differ diff --git a/docs/doctrees/environment.pickle b/docs/doctrees/environment.pickle index a14acc47..9b193a99 100644 Binary files a/docs/doctrees/environment.pickle and b/docs/doctrees/environment.pickle differ diff --git a/docs/doctrees/network.doctree b/docs/doctrees/network.doctree index 8ae8522f..dd22d028 100644 Binary files a/docs/doctrees/network.doctree and b/docs/doctrees/network.doctree differ diff --git a/docs/doctrees/utils.doctree b/docs/doctrees/utils.doctree index 835a7550..982311bc 100644 Binary files a/docs/doctrees/utils.doctree and b/docs/doctrees/utils.doctree differ diff --git a/docs/html/bots.html b/docs/html/bots.html index 641763e0..cd9066b5 100644 --- a/docs/html/bots.html +++ b/docs/html/bots.html @@ -164,7 +164,12 @@
_call_factory() → Type[royalnet.utils.call.Call]
-

Create the TelegramCall class, representing a command call. It should inherit from :py:class`royalnet.utils.Call`.

+

Create the TelegramCall class, representing a command call. It should inherit from royalnet.utils.Call.

+
+
Returns
+

The created TelegramCall class.

+
+
@@ -215,13 +220,18 @@
_call_factory() → Type[royalnet.utils.call.Call]
-

Create the TelegramCall class, representing a command call. It should inherit from :py:class`royalnet.utils.Call`.

+

Create the TelegramCall class, representing a command call. It should inherit from royalnet.utils.Call.

+
+
Returns
+

The created TelegramCall class.

+
+
_init_client()
-

Create an instance of the DiscordClient class created in royalnet.bots.discord._bot_factory().

+

Create an instance of the DiscordClient class created in royalnet.bots.DiscordBot._bot_factory().

@@ -265,7 +275,7 @@
class royalnet.bots.DiscordConfig(token: str)
-

The specific configuration to be used for royalnet.database.DiscordBot.

+

The specific configuration to be used for royalnet.bots.DiscordBot.

@@ -275,19 +285,24 @@
_call_factory() → Type[royalnet.utils.call.Call]
-

Create the TelegramCall class, representing a command call. It should inherit from :py:class`royalnet.utils.Call`.

+

Create the TelegramCall class, representing a command call. It should inherit from royalnet.utils.Call.

+
+
Returns
+

The created TelegramCall class.

+
+
-_init_commands(command_prefix: str, commands: List[Type[royalnet.utils.command.Command]], missing_command: Type[royalnet.utils.command.Command], error_command: Type[royalnet.utils.command.Command])
+_init_commands(command_prefix: str, commands: List[Type[royalnet.utils.command.Command]], missing_command: Type[royalnet.utils.command.Command], error_command: Type[royalnet.utils.command.Command]) → None

Generate the commands dictionary required to handle incoming messages, and the network_handlers dictionary required to handle incoming requests.

_init_database(commands: List[Type[royalnet.utils.command.Command]], database_config: royalnet.database.databaseconfig.DatabaseConfig)
-

Create an royalnet.network.Alchemy with the tables required by the commands. Then, find the chain that links the master_table to the identity_table.

+

Create an royalnet.database.Alchemy with the tables required by the commands. Then, find the chain that links the master_table to the identity_table.

@@ -299,7 +314,12 @@
_network_handler(message: royalnet.network.messages.Message) → royalnet.network.messages.Message
-

Handle a single royalnet.network.Message received from the royalnet.network.RoyalnetLink

+

Handle a single royalnet.network.Message received from the royalnet.network.RoyalnetLink.

+
+
Returns
+

Another message, to be sent as royalnet.network.Reply.

+
+
diff --git a/docs/html/commands.html b/docs/html/commands.html index 2fae6001..f7e7cb01 100644 --- a/docs/html/commands.html +++ b/docs/html/commands.html @@ -257,6 +257,11 @@ class royalnet.commands.PlaymodeCommand
+
+
+class royalnet.commands.VideochannelCommand
+
+ diff --git a/docs/html/database.html b/docs/html/database.html index b6d99cbb..126f6b43 100644 --- a/docs/html/database.html +++ b/docs/html/database.html @@ -259,7 +259,7 @@
-royal = <RelationshipProperty at 0x7a70300; no key>
+royal = <RelationshipProperty at 0x73b84b0; no key>
@@ -289,7 +289,7 @@
-creator = <RelationshipProperty at 0x7a70348; no key>
+creator = <RelationshipProperty at 0x73b84f8; no key>
@@ -314,7 +314,7 @@
-quoted_account = <RelationshipProperty at 0x7a70978; no key>
+quoted_account = <RelationshipProperty at 0x73b8b28; no key>
@@ -349,7 +349,7 @@
-royal = <RelationshipProperty at 0x7a70198; no key>
+royal = <RelationshipProperty at 0x73b8198; no key>
@@ -364,7 +364,7 @@ class royalnet.database.tables.ActiveKvGroup
-group = <RelationshipProperty at 0x7a701e0; no key>
+group = <RelationshipProperty at 0x73b80c0; no key>
@@ -374,7 +374,7 @@
-royal = <RelationshipProperty at 0x7a70b70; no key>
+royal = <RelationshipProperty at 0x73b8df8; no key>
@@ -389,7 +389,7 @@ class royalnet.database.tables.Keyvalue
-group = <RelationshipProperty at 0x7a709c0; no key>
+group = <RelationshipProperty at 0x73b8930; no key>
@@ -444,7 +444,7 @@
-royal = <RelationshipProperty at 0x7a70a08; no key>
+royal = <RelationshipProperty at 0x73b8b28; no key>
diff --git a/docs/html/genindex.html b/docs/html/genindex.html index 023f1643..8b455005 100644 --- a/docs/html/genindex.html +++ b/docs/html/genindex.html @@ -786,6 +786,8 @@
  • value (royalnet.database.tables.Keyvalue attribute) +
  • +
  • VideochannelCommand (class in royalnet.commands)
  • VideoinfoCommand (class in royalnet.commands)
  • diff --git a/docs/html/network.html b/docs/html/network.html index e4a518ef..ab2048f0 100644 --- a/docs/html/network.html +++ b/docs/html/network.html @@ -237,7 +237,8 @@
    exception royalnet.network.NotIdentifiedError
    -
    +

    The royalnet.network.RoyalnetLink has not identified yet to a royalnet.network.RoyalnetServer.

    +
    diff --git a/docs/html/objects.inv b/docs/html/objects.inv index 4a2407b5..95e902a0 100644 Binary files a/docs/html/objects.inv and b/docs/html/objects.inv differ diff --git a/docs/html/searchindex.js b/docs/html/searchindex.js index 5d4d124d..8a6d01a2 100644 --- a/docs/html/searchindex.js +++ b/docs/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["audio","bots","commands","database","index","network","utils"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":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:["audio.rst","bots.rst","commands.rst","database.rst","index.rst","network.rst","utils.rst"],objects:{"royalnet.audio":{PlayMode:[0,1,1,""],Playlist:[0,1,1,""],Pool:[0,1,1,""],RoyalPCMAudio:[0,1,1,""],RoyalPCMFile:[0,1,1,""],YtdlFile:[0,1,1,""],YtdlInfo:[0,1,1,""]},"royalnet.audio.PlayMode":{"delete":[0,2,1,""],__init__:[0,2,1,""],_generate_generator:[0,2,1,""],add:[0,2,1,""],next:[0,2,1,""],videos_left:[0,2,1,""]},"royalnet.audio.Playlist":{"delete":[0,2,1,""],__init__:[0,2,1,""],_generate_generator:[0,2,1,""],add:[0,2,1,""],videos_left:[0,2,1,""]},"royalnet.audio.Pool":{"delete":[0,2,1,""],__init__:[0,2,1,""],_generate_generator:[0,2,1,""],add:[0,2,1,""],videos_left:[0,2,1,""]},"royalnet.audio.RoyalPCMAudio":{"delete":[0,2,1,""],__init__:[0,2,1,""],create_from_url:[0,3,1,""],create_from_ytsearch:[0,3,1,""],is_opus:[0,2,1,""],read:[0,2,1,""]},"royalnet.audio.RoyalPCMFile":{audio_filename:[0,4,1,""],create_from_url:[0,3,1,""],create_from_ytsearch:[0,3,1,""],delete_audio_file:[0,2,1,""],ytdl_args:[0,4,1,""],ytdl_filename:[0,4,1,""]},"royalnet.audio.YtdlFile":{_stop_download:[0,2,1,""],create_from_url:[0,3,1,""],delete_video_file:[0,2,1,""],ytdl_args:[0,4,1,""]},"royalnet.audio.YtdlInfo":{__init__:[0,2,1,""],create_from_url:[0,3,1,""],download:[0,2,1,""]},"royalnet.bots":{DiscordBot:[1,1,1,""],DiscordConfig:[1,1,1,""],GenericBot:[1,1,1,""],TelegramBot:[1,1,1,""],TelegramConfig:[1,1,1,""]},"royalnet.bots.DiscordBot":{_bot_factory:[1,2,1,""],_call_factory:[1,2,1,""],_init_client:[1,2,1,""],_init_voice:[1,2,1,""],add_to_music_data:[1,2,1,""],advance_music_data:[1,2,1,""],interface_name:[1,4,1,""],run:[1,2,1,""],update_activity_with_source_title:[1,2,1,""]},"royalnet.bots.GenericBot":{_call_factory:[1,2,1,""],_init_commands:[1,2,1,""],_init_database:[1,2,1,""],_init_royalnet:[1,2,1,""],_network_handler:[1,2,1,""],call:[1,2,1,""],interface_name:[1,4,1,""],run:[1,2,1,""]},"royalnet.bots.TelegramBot":{_call_factory:[1,2,1,""],_handle_update:[1,2,1,""],_init_client:[1,2,1,""],botfather_command_string:[1,4,1,""],interface_name:[1,4,1,""],run:[1,2,1,""]},"royalnet.commands":{AuthorCommand:[2,1,1,""],CiaoruoziCommand:[2,1,1,""],ColorCommand:[2,1,1,""],DateparserCommand:[2,1,1,""],DiarioCommand:[2,1,1,""],KvCommand:[2,1,1,""],KvactiveCommand:[2,1,1,""],KvrollCommand:[2,1,1,""],NullCommand:[2,1,1,""],PingCommand:[2,1,1,""],PlayCommand:[2,1,1,""],PlaymodeCommand:[2,1,1,""],RageCommand:[2,1,1,""],ReminderCommand:[2,1,1,""],ShipCommand:[2,1,1,""],SkipCommand:[2,1,1,""],SmecdsCommand:[2,1,1,""],SummonCommand:[2,1,1,""],SyncCommand:[2,1,1,""],VideoinfoCommand:[2,1,1,""]},"royalnet.database":{Alchemy:[3,1,1,""],DatabaseConfig:[3,1,1,""],relationshiplinkchain:[3,5,1,""],tables:[3,0,0,"-"]},"royalnet.database.Alchemy":{__init__:[3,2,1,""],_create_tables:[3,2,1,""],session_acm:[3,2,1,""],session_cm:[3,2,1,""]},"royalnet.database.tables":{ActiveKvGroup:[3,1,1,""],Alias:[3,1,1,""],Diario:[3,1,1,""],Discord:[3,1,1,""],Keygroup:[3,1,1,""],Keyvalue:[3,1,1,""],Royal:[3,1,1,""],Telegram:[3,1,1,""]},"royalnet.database.tables.ActiveKvGroup":{group:[3,4,1,""],group_name:[3,4,1,""],royal:[3,4,1,""],royal_id:[3,4,1,""]},"royalnet.database.tables.Alias":{alias:[3,4,1,""],royal:[3,4,1,""],royal_id:[3,4,1,""]},"royalnet.database.tables.Diario":{context:[3,4,1,""],creator:[3,4,1,""],creator_id:[3,4,1,""],diario_id:[3,4,1,""],media_url:[3,4,1,""],quoted:[3,4,1,""],quoted_account:[3,4,1,""],quoted_account_id:[3,4,1,""],spoiler:[3,4,1,""],text:[3,4,1,""],timestamp:[3,4,1,""]},"royalnet.database.tables.Discord":{avatar_hash:[3,4,1,""],discord_id:[3,4,1,""],discriminator:[3,4,1,""],full_username:[3,2,1,""],royal:[3,4,1,""],royal_id:[3,4,1,""],username:[3,4,1,""]},"royalnet.database.tables.Keygroup":{group_name:[3,4,1,""]},"royalnet.database.tables.Keyvalue":{group:[3,4,1,""],group_name:[3,4,1,""],key:[3,4,1,""],value:[3,4,1,""]},"royalnet.database.tables.Royal":{avatar:[3,4,1,""],password:[3,4,1,""],role:[3,4,1,""],uid:[3,4,1,""],username:[3,4,1,""]},"royalnet.database.tables.Telegram":{first_name:[3,4,1,""],last_name:[3,4,1,""],mention:[3,2,1,""],royal:[3,4,1,""],royal_id:[3,4,1,""],tg_id:[3,4,1,""],username:[3,4,1,""]},"royalnet.network":{InvalidDestinationEM:[5,1,1,""],InvalidPackageEM:[5,1,1,""],InvalidSecretEM:[5,1,1,""],Message:[5,1,1,""],NetworkError:[5,6,1,""],NotConnectedError:[5,6,1,""],NotIdentifiedError:[5,6,1,""],Package:[5,1,1,""],Reply:[5,1,1,""],RequestError:[5,1,1,""],RequestSuccessful:[5,1,1,""],RoyalnetConfig:[5,1,1,""],RoyalnetLink:[5,1,1,""],RoyalnetServer:[5,1,1,""],ServerErrorMessage:[5,1,1,""]},"royalnet.network.Package":{__init__:[5,2,1,""],pickle:[5,2,1,""],reply:[5,2,1,""]},"royalnet.network.Reply":{raise_on_error:[5,2,1,""]},"royalnet.network.RequestError":{__init__:[5,2,1,""],raise_on_error:[5,2,1,""]},"royalnet.network.RequestSuccessful":{raise_on_error:[5,2,1,""]},"royalnet.network.RoyalnetLink":{connect:[5,2,1,""],identify:[5,2,1,""],receive:[5,2,1,""],request:[5,2,1,""],run:[5,2,1,""],send:[5,2,1,""]},"royalnet.network.RoyalnetServer":{find_client:[5,2,1,""],find_destination:[5,2,1,""],listener:[5,2,1,""],route_package:[5,2,1,""],serve:[5,2,1,""],start:[5,2,1,""]},"royalnet.utils":{Call:[6,1,1,""],Command:[6,1,1,""],CommandArgs:[6,1,1,""],NetworkHandler:[6,1,1,""],asyncify:[6,5,1,""],cdj:[6,5,1,""],plusformat:[6,5,1,""],safefilename:[6,5,1,""],safeformat:[6,5,1,""],sleep_until:[6,5,1,""]},"royalnet.utils.Call":{alchemy:[6,4,1,""],get_author:[6,2,1,""],interface_name:[6,4,1,""],interface_obj:[6,4,1,""],interface_prefix:[6,4,1,""],net_request:[6,2,1,""],reply:[6,2,1,""],run:[6,2,1,""],session_end:[6,2,1,""],session_init:[6,2,1,""]},"royalnet.utils.Command":{command_description:[6,4,1,""],command_name:[6,4,1,""],command_syntax:[6,4,1,""],common:[6,7,1,""],network_handler_dict:[6,7,1,""],network_handlers:[6,4,1,""],require_alchemy_tables:[6,4,1,""]},"royalnet.utils.CommandArgs":{joined:[6,2,1,""],match:[6,2,1,""],optional:[6,2,1,""]},"royalnet.utils.NetworkHandler":{message_type:[6,4,1,""]},royalnet:{audio:[0,0,0,"-"],bots:[1,0,0,"-"],commands:[2,0,0,"-"],database:[3,0,0,"-"],network:[5,0,0,"-"],utils:[6,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","staticmethod","Python static method"],"4":["py","attribute","Python attribute"],"5":["py","function","Python function"],"6":["py","exception","Python exception"],"7":["py","classmethod","Python class method"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:staticmethod","4":"py:attribute","5":"py:function","6":"py:exception","7":"py:classmethod"},terms:{"0x7a70198":3,"0x7a701e0":3,"0x7a70300":3,"0x7a70348":3,"0x7a70978":3,"0x7a709c0":3,"0x7a70a08":3,"0x7a70b70":3,"20m":0,"48khz":0,"abstract":6,"boolean":3,"byte":[0,5],"class":[0,1,2,3,5,6],"default":[0,3,6],"float":0,"function":[0,6],"int":[0,5,6],"new":[0,3,6],"null":[1,5],"return":[0,1,5,6],"static":0,"true":[0,3,6],"try":[1,6],"while":[0,1,3],Not:0,That:6,The:[0,1,3,5,6],Then:1,Use:3,__init__:[0,3,5],_bot_factori:1,_call_factori:1,_create_t:3,_generate_gener:0,_handle_upd:1,_init_cli:1,_init_command:1,_init_databas:1,_init_royalnet:1,_init_voic:1,_network_handl:1,_stop_download:0,_windowsselectoreventloop:5,about:0,abstracteventloop:5,activekvgroup:3,add:[0,1],add_to_music_data:1,address:5,advanc:0,advance_music_data:1,akin:5,alchemi:[1,3,6],alia:3,all:0,allow:3,alreadi:0,also:[0,5],altern:5,alwai:[1,5],amount:0,ani:[0,6],anoth:5,answer:6,anystr:6,arg:[5,6],argument:[0,6],around:[0,3],async:[0,3],asyncifi:6,asyncio:[1,5],asyncron:3,attribut:6,audio:[1,4],audio_filenam:0,audio_sourc:1,audiosourc:0,author:6,authorcommand:2,avatar:3,avatar_hash:3,base:[0,1],been:0,bestaudio:0,biginteg:3,bit:0,block:1,bool:6,bot:[3,4],botfather_command_str:1,both:3,call:[1,6],callabl:6,can:5,caus:5,cdj:6,chain:1,chang:[0,1],change_pres:1,channel:[1,6],chat:1,check:[0,3],ciaoruozicommand:2,class_:6,classmethod:6,clean:6,client:1,close:5,colorcommand:2,column:3,columndefault:3,command:[1,4,6],command_arg:6,command_descript:6,command_nam:[1,6],command_prefix:1,command_syntax:6,commandarg:6,common:6,commun:5,compat:0,complet:0,compon:3,configur:[1,3],connect:[1,5],connectedcli:5,contain:[0,5],context:3,convers:5,convert:0,core:3,coroutin:1,correspond:[0,1],creat:[0,1,3,5,6],create_from_url:0,create_from_ytsearch:0,creator:3,creator_id:3,ct_co:3,current:1,custom:[0,1],data:[0,5,6],databas:[1,4,6],database_config:1,database_uri:3,databaseconfig:[1,3],dateparsercommand:2,datetim:[3,6],debug:5,declar:3,delet:0,delete_audio_fil:0,delete_video_fil:0,describ:3,destin:[5,6],destination_conv_id:5,detail:3,diario:3,diario_id:3,diariocommand:2,dict:[0,6],dictionari:1,discord:[0,1,3],discord_config:1,discord_id:3,discordbot:1,discordcli:1,discordconfig:1,discrimin:3,doc:3,doe:[0,5,6],doesn:1,download:0,dure:1,each:0,either:0,empti:[0,1],encod:0,end:3,ending_class:3,engin:3,error:5,error_command:1,error_if_non:6,error_msg:5,event:5,everi:[0,5],exc:5,except:[1,5],execut:[1,5],exist:[1,6],ext:0,extra:0,extract:0,extract_info:0,factori:0,fals:[0,3,5,6],file:[0,1],find:[1,3,5,6],find_client:5,find_destin:5,first:0,first_nam:3,follow:3,foreignkei:3,form:5,format:0,found:[5,6],frame:0,from:[0,1,3,6],full_usernam:3,gener:[0,1,6],genericbot:[1,3],get:[0,3],get_author:6,going:0,group:3,group_nam:3,guild:1,handl:1,has:0,have:1,html:3,http:3,identifi:[5,6],identity_column_nam:3,identity_t:[1,3],ignore_escap:6,implement:0,incom:1,incorrect:5,index:[4,6],inf:0,infinit:0,info:0,inherit:[0,1],initi:[0,1],insid:0,instanc:1,instead:0,integ:3,interface_nam:[1,6],interface_obj:6,interface_prefix:6,invalid:5,invaliddestinationem:5,invalidinputerror:6,invalidpackageem:5,invalidsecretem:5,is_opu:0,item:0,join:6,just:1,keep:0,kei:3,keygroup:3,keyvalu:3,kvactivecommand:2,kvcommand:2,kvrollcommand:2,kwarg:[1,6],largebinari:3,last_nam:3,least:0,left:0,like:0,link:[1,5],link_typ:5,list:[0,1,5,6],listen:[1,5],logger:0,login:1,loop:5,made:6,mai:0,maintain:3,make:1,manag:3,master_secret:5,master_t:[1,3],master_uri:5,match:[1,6],math:0,mean:6,media_url:3,memori:0,mention:3,messag:[1,5,6],message_typ:6,method:0,missing_command:1,modul:4,more:[1,3],multipl:[1,3],music_data:1,must:[0,5,6],name:[0,1],need:1,net_request:6,network:[1,4,6],network_handl:[1,6],network_handler_dict:6,networkerror:5,networkhandl:6,next:[0,1],nid:5,no_warn:0,nobodi:5,node:5,none:[0,1,3,5,6],noplaylist:0,notconnectederror:5,noth:5,notidentifiederror:5,notimpl:[1,6],now_plai:0,nullabl:3,nullcommand:[1,2],number:[0,5],object:[0,1,3],offset:1,onc:[0,3],option:[0,1,3,6],opu:0,order:0,org:3,other:1,otherwis:[0,1,5],outtmpl:0,packag:5,packet:5,page:4,paramet:[0,1,3,5],pass:0,password:3,path:3,pattern:6,pcm:0,per:0,perman:0,pickl:5,pickleabl:6,pingcommand:2,plai:[0,1],playcommand:2,playlist:0,playmod:0,playmodecommand:2,plusformat:6,pool:0,port:5,presenc:1,primary_kei:3,probabl:[0,6],properti:0,quiet:0,quot:3,quoted_account:3,quoted_account_id:3,ragecommand:2,rais:[1,5,6],raise_on_error:5,random:0,read:0,reason:5,receiv:[1,5,6],recommend:0,relationshiplinkchain:3,relationshipproperti:3,remindercommand:2,remov:0,repeat:0,repli:[5,6],repres:[0,1],request:[1,5,6],request_handl:5,request_uri:5,requesterror:5,requestsuccess:5,requir:1,require_alchemy_t:6,require_at_least:6,required_secret:5,rest:6,role:3,rout:5,route_packag:5,row:6,royal:3,royal_id:3,royalnet_config:1,royalnetconfig:[1,5],royalneterror:5,royalnetlink:[1,5],royalnetserv:5,royalpcmaudio:[0,1],royalpcmfil:0,rpf:0,run:[1,5,6],safefilenam:6,safeformat:6,search:[0,4],secret:5,select:[0,3],self:1,send:[5,6],sent:[5,6],sequenc:[5,6],serv:5,server:5,servererrormessag:5,session_acm:3,session_cm:3,session_end:6,session_init:6,set:[1,3,6],shipcommand:2,should:[1,5,6],signal:0,singl:[1,3],skipcommand:2,sleep_until:6,smecdscommand:2,someth:5,somewher:5,song:[0,1],soon:0,sourc:[0,5,6],source_conv_id:5,specif:[1,6],specifi:1,spoiler:3,sqlalchemi:3,start:[1,3,5],starting_class:3,starting_list:0,starting_pool:0,statement:3,statu:1,stereo:0,still:6,str:[0,1,3,5,6],string:[0,3,6],subbot:6,subclass:0,submodul:3,success:5,summoncommand:2,synccommand:2,tabl:1,task:1,telegram:[1,3],telegram_config:1,telegrambot:1,telegramcal:1,telegramconfig:1,termin:5,text:[3,6],tg_id:3,them:3,thi:[0,5,6],those:0,through:5,time:5,timestamp:3,titl:0,token:1,tupl:3,type:[0,1,3,5,6],uid:3,union:0,univers:6,unregisterederror:6,until:0,updat:1,update_activity_with_source_titl:1,uri:3,url:0,use:[0,3],used:[1,3],useful:0,user:6,usernam:3,using:1,usual:[0,5],util:[1,4],valu:[0,3,5],variabl:1,veri:0,video:0,videoinfocommand:2,videos_left:0,voic:1,wai:0,wait:6,want:0,warn:0,wasn:5,websocket:5,websocketserverprotocol:5,went:5,when:6,which:[0,5],word:6,worth:0,wrapper:[0,3],wrong:5,yield:0,you:0,youtub:0,youtube_dl:0,youtubedl:0,ytdl_arg:0,ytdl_filenam:0,ytdlfile:0,ytdlinfo:0},titles:["royalnet.audio","royalnet.bots","royalnet.commands","royalnet.database","royalnet","royalnet.network","royalnet.utils"],titleterms:{audio:0,bot:1,command:2,databas:3,indic:4,network:5,royalnet:[0,1,2,3,4,5,6],tabl:[3,4],util:6}}) \ No newline at end of file +Search.setIndex({docnames:["audio","bots","commands","database","index","network","utils"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":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:["audio.rst","bots.rst","commands.rst","database.rst","index.rst","network.rst","utils.rst"],objects:{"royalnet.audio":{PlayMode:[0,1,1,""],Playlist:[0,1,1,""],Pool:[0,1,1,""],RoyalPCMAudio:[0,1,1,""],RoyalPCMFile:[0,1,1,""],YtdlFile:[0,1,1,""],YtdlInfo:[0,1,1,""]},"royalnet.audio.PlayMode":{"delete":[0,2,1,""],__init__:[0,2,1,""],_generate_generator:[0,2,1,""],add:[0,2,1,""],next:[0,2,1,""],videos_left:[0,2,1,""]},"royalnet.audio.Playlist":{"delete":[0,2,1,""],__init__:[0,2,1,""],_generate_generator:[0,2,1,""],add:[0,2,1,""],videos_left:[0,2,1,""]},"royalnet.audio.Pool":{"delete":[0,2,1,""],__init__:[0,2,1,""],_generate_generator:[0,2,1,""],add:[0,2,1,""],videos_left:[0,2,1,""]},"royalnet.audio.RoyalPCMAudio":{"delete":[0,2,1,""],__init__:[0,2,1,""],create_from_url:[0,3,1,""],create_from_ytsearch:[0,3,1,""],is_opus:[0,2,1,""],read:[0,2,1,""]},"royalnet.audio.RoyalPCMFile":{audio_filename:[0,4,1,""],create_from_url:[0,3,1,""],create_from_ytsearch:[0,3,1,""],delete_audio_file:[0,2,1,""],ytdl_args:[0,4,1,""],ytdl_filename:[0,4,1,""]},"royalnet.audio.YtdlFile":{_stop_download:[0,2,1,""],create_from_url:[0,3,1,""],delete_video_file:[0,2,1,""],ytdl_args:[0,4,1,""]},"royalnet.audio.YtdlInfo":{__init__:[0,2,1,""],create_from_url:[0,3,1,""],download:[0,2,1,""]},"royalnet.bots":{DiscordBot:[1,1,1,""],DiscordConfig:[1,1,1,""],GenericBot:[1,1,1,""],TelegramBot:[1,1,1,""],TelegramConfig:[1,1,1,""]},"royalnet.bots.DiscordBot":{_bot_factory:[1,2,1,""],_call_factory:[1,2,1,""],_init_client:[1,2,1,""],_init_voice:[1,2,1,""],add_to_music_data:[1,2,1,""],advance_music_data:[1,2,1,""],interface_name:[1,4,1,""],run:[1,2,1,""],update_activity_with_source_title:[1,2,1,""]},"royalnet.bots.GenericBot":{_call_factory:[1,2,1,""],_init_commands:[1,2,1,""],_init_database:[1,2,1,""],_init_royalnet:[1,2,1,""],_network_handler:[1,2,1,""],call:[1,2,1,""],interface_name:[1,4,1,""],run:[1,2,1,""]},"royalnet.bots.TelegramBot":{_call_factory:[1,2,1,""],_handle_update:[1,2,1,""],_init_client:[1,2,1,""],botfather_command_string:[1,4,1,""],interface_name:[1,4,1,""],run:[1,2,1,""]},"royalnet.commands":{AuthorCommand:[2,1,1,""],CiaoruoziCommand:[2,1,1,""],ColorCommand:[2,1,1,""],DateparserCommand:[2,1,1,""],DiarioCommand:[2,1,1,""],KvCommand:[2,1,1,""],KvactiveCommand:[2,1,1,""],KvrollCommand:[2,1,1,""],NullCommand:[2,1,1,""],PingCommand:[2,1,1,""],PlayCommand:[2,1,1,""],PlaymodeCommand:[2,1,1,""],RageCommand:[2,1,1,""],ReminderCommand:[2,1,1,""],ShipCommand:[2,1,1,""],SkipCommand:[2,1,1,""],SmecdsCommand:[2,1,1,""],SummonCommand:[2,1,1,""],SyncCommand:[2,1,1,""],VideochannelCommand:[2,1,1,""],VideoinfoCommand:[2,1,1,""]},"royalnet.database":{Alchemy:[3,1,1,""],DatabaseConfig:[3,1,1,""],relationshiplinkchain:[3,5,1,""],tables:[3,0,0,"-"]},"royalnet.database.Alchemy":{__init__:[3,2,1,""],_create_tables:[3,2,1,""],session_acm:[3,2,1,""],session_cm:[3,2,1,""]},"royalnet.database.tables":{ActiveKvGroup:[3,1,1,""],Alias:[3,1,1,""],Diario:[3,1,1,""],Discord:[3,1,1,""],Keygroup:[3,1,1,""],Keyvalue:[3,1,1,""],Royal:[3,1,1,""],Telegram:[3,1,1,""]},"royalnet.database.tables.ActiveKvGroup":{group:[3,4,1,""],group_name:[3,4,1,""],royal:[3,4,1,""],royal_id:[3,4,1,""]},"royalnet.database.tables.Alias":{alias:[3,4,1,""],royal:[3,4,1,""],royal_id:[3,4,1,""]},"royalnet.database.tables.Diario":{context:[3,4,1,""],creator:[3,4,1,""],creator_id:[3,4,1,""],diario_id:[3,4,1,""],media_url:[3,4,1,""],quoted:[3,4,1,""],quoted_account:[3,4,1,""],quoted_account_id:[3,4,1,""],spoiler:[3,4,1,""],text:[3,4,1,""],timestamp:[3,4,1,""]},"royalnet.database.tables.Discord":{avatar_hash:[3,4,1,""],discord_id:[3,4,1,""],discriminator:[3,4,1,""],full_username:[3,2,1,""],royal:[3,4,1,""],royal_id:[3,4,1,""],username:[3,4,1,""]},"royalnet.database.tables.Keygroup":{group_name:[3,4,1,""]},"royalnet.database.tables.Keyvalue":{group:[3,4,1,""],group_name:[3,4,1,""],key:[3,4,1,""],value:[3,4,1,""]},"royalnet.database.tables.Royal":{avatar:[3,4,1,""],password:[3,4,1,""],role:[3,4,1,""],uid:[3,4,1,""],username:[3,4,1,""]},"royalnet.database.tables.Telegram":{first_name:[3,4,1,""],last_name:[3,4,1,""],mention:[3,2,1,""],royal:[3,4,1,""],royal_id:[3,4,1,""],tg_id:[3,4,1,""],username:[3,4,1,""]},"royalnet.network":{InvalidDestinationEM:[5,1,1,""],InvalidPackageEM:[5,1,1,""],InvalidSecretEM:[5,1,1,""],Message:[5,1,1,""],NetworkError:[5,6,1,""],NotConnectedError:[5,6,1,""],NotIdentifiedError:[5,6,1,""],Package:[5,1,1,""],Reply:[5,1,1,""],RequestError:[5,1,1,""],RequestSuccessful:[5,1,1,""],RoyalnetConfig:[5,1,1,""],RoyalnetLink:[5,1,1,""],RoyalnetServer:[5,1,1,""],ServerErrorMessage:[5,1,1,""]},"royalnet.network.Package":{__init__:[5,2,1,""],pickle:[5,2,1,""],reply:[5,2,1,""]},"royalnet.network.Reply":{raise_on_error:[5,2,1,""]},"royalnet.network.RequestError":{__init__:[5,2,1,""],raise_on_error:[5,2,1,""]},"royalnet.network.RequestSuccessful":{raise_on_error:[5,2,1,""]},"royalnet.network.RoyalnetLink":{connect:[5,2,1,""],identify:[5,2,1,""],receive:[5,2,1,""],request:[5,2,1,""],run:[5,2,1,""],send:[5,2,1,""]},"royalnet.network.RoyalnetServer":{find_client:[5,2,1,""],find_destination:[5,2,1,""],listener:[5,2,1,""],route_package:[5,2,1,""],serve:[5,2,1,""],start:[5,2,1,""]},"royalnet.utils":{Call:[6,1,1,""],Command:[6,1,1,""],CommandArgs:[6,1,1,""],NetworkHandler:[6,1,1,""],asyncify:[6,5,1,""],cdj:[6,5,1,""],plusformat:[6,5,1,""],safefilename:[6,5,1,""],safeformat:[6,5,1,""],sleep_until:[6,5,1,""]},"royalnet.utils.Call":{alchemy:[6,4,1,""],get_author:[6,2,1,""],interface_name:[6,4,1,""],interface_obj:[6,4,1,""],interface_prefix:[6,4,1,""],net_request:[6,2,1,""],reply:[6,2,1,""],run:[6,2,1,""],session_end:[6,2,1,""],session_init:[6,2,1,""]},"royalnet.utils.Command":{command_description:[6,4,1,""],command_name:[6,4,1,""],command_syntax:[6,4,1,""],common:[6,7,1,""],network_handler_dict:[6,7,1,""],network_handlers:[6,4,1,""],require_alchemy_tables:[6,4,1,""]},"royalnet.utils.CommandArgs":{joined:[6,2,1,""],match:[6,2,1,""],optional:[6,2,1,""]},"royalnet.utils.NetworkHandler":{message_type:[6,4,1,""]},royalnet:{audio:[0,0,0,"-"],bots:[1,0,0,"-"],commands:[2,0,0,"-"],database:[3,0,0,"-"],network:[5,0,0,"-"],utils:[6,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","staticmethod","Python static method"],"4":["py","attribute","Python attribute"],"5":["py","function","Python function"],"6":["py","exception","Python exception"],"7":["py","classmethod","Python class method"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:staticmethod","4":"py:attribute","5":"py:function","6":"py:exception","7":"py:classmethod"},terms:{"0x73b80c0":3,"0x73b8198":3,"0x73b84b0":3,"0x73b84f8":3,"0x73b8930":3,"0x73b8b28":3,"0x73b8df8":3,"20m":0,"48khz":0,"abstract":6,"boolean":3,"byte":[0,5],"class":[0,1,2,3,5,6],"default":[0,3,6],"float":0,"function":[0,6],"int":[0,5,6],"new":[0,3,6],"null":[1,5],"return":[0,1,5,6],"static":0,"true":[0,3,6],"try":[1,6],"while":[0,1,3],Not:0,That:6,The:[0,1,3,5,6],Then:1,Use:3,__init__:[0,3,5],_bot_factori:1,_call_factori:1,_create_t:3,_generate_gener:0,_handle_upd:1,_init_cli:1,_init_command:1,_init_databas:1,_init_royalnet:1,_init_voic:1,_network_handl:1,_stop_download:0,_windowsselectoreventloop:5,about:0,abstracteventloop:5,accur:6,activekvgroup:3,add:[0,1],add_to_music_data:1,adding:6,address:5,advanc:0,advance_music_data:1,akin:5,alchemi:[1,3,6],alia:3,all:[0,6],allow:3,alreadi:0,also:[0,5],altern:5,alwai:[1,5],amount:0,ani:[0,6],anoth:[1,5],answer:6,anystr:6,arg:[5,6],argument:[0,6],around:[0,3],async:[0,3],asyncifi:6,asyncio:[1,5],asyncron:3,attribut:6,audio:[1,4],audio_filenam:0,audio_sourc:1,audiosourc:0,author:6,authorcommand:2,avatar:3,avatar_hash:3,base:[0,1],been:0,bestaudio:0,biginteg:3,bit:0,block:[1,6],bool:6,bot:[3,4],botfather_command_str:1,both:3,call:[1,6],callabl:6,can:[5,6],caus:5,cdj:6,chain:1,chang:[0,1],change_pres:1,channel:[1,6],charact:6,chat:1,check:[0,3],ciaoruozicommand:2,class_:6,classmethod:6,clean:6,client:1,close:5,colorcommand:2,column:3,columndefault:3,command:[1,4,6],command_arg:6,command_descript:6,command_nam:[1,6],command_prefix:1,command_syntax:6,commandarg:6,common:6,commun:5,compat:0,complet:0,compon:3,configur:[1,3],connect:[1,5],connectedcli:5,contain:[0,5],context:3,convers:5,convert:[0,6],core:3,coroutin:1,correspond:[0,1],creat:[0,1,3,5,6],create_from_url:0,create_from_ytsearch:0,creator:3,creator_id:3,ct_co:3,current:1,custom:[0,1],data:[0,5,6],databas:[1,4,6],database_config:1,database_uri:3,databaseconfig:[1,3],dateparsercommand:2,datetim:[3,6],debug:5,declar:3,delet:0,delete_audio_fil:0,delete_video_fil:0,describ:3,destin:[5,6],destination_conv_id:5,detail:3,diario:3,diario_id:3,diariocommand:2,dict:[0,6],dictionari:1,discord:[0,1,3],discord_config:1,discord_id:3,discordbot:1,discordcli:1,discordconfig:1,discrimin:3,doc:3,doe:[0,5,6],doesn:1,download:0,dure:1,each:0,either:0,empti:[0,1],encod:0,end:3,ending_class:3,engin:3,ensur:6,error:5,error_command:1,error_if_non:6,error_msg:5,event:5,everi:[0,5],exc:5,except:[1,5],execut:[1,5],exist:[1,6],ext:0,extra:0,extract:0,extract_info:0,factori:0,fals:[0,3,5,6],file:[0,1],filenam:6,find:[1,3,5,6],find_client:5,find_destin:5,first:0,first_nam:3,follow:3,foreignkei:3,form:5,format:0,found:[5,6],frame:0,from:[0,1,3,6],full_usernam:3,gener:[0,1,6],genericbot:[1,3],get:[0,3],get_author:6,going:0,greater:6,group:3,group_nam:3,guild:1,handl:1,has:[0,5],have:1,html:3,http:3,identifi:[5,6],identity_column_nam:3,identity_t:[1,3],ignore_escap:6,implement:0,incom:1,incorrect:5,index:[4,6],inf:0,infinit:0,info:0,inherit:[0,1],initi:[0,1],insid:0,instanc:1,instead:0,integ:3,interface_nam:[1,6],interface_obj:6,interface_prefix:6,invalid:5,invaliddestinationem:5,invalidinputerror:6,invalidpackageem:5,invalidsecretem:5,is_opu:0,item:0,join:6,just:1,keep:0,kei:3,keygroup:3,keyvalu:3,kvactivecommand:2,kvcommand:2,kvrollcommand:2,kwarg:[1,6],largebinari:3,last_nam:3,least:0,left:0,like:0,link:[1,5],link_typ:5,list:[0,1,5,6],listen:[1,5],logger:0,login:1,loop:5,made:6,mai:0,maintain:3,make:1,manag:3,master_secret:5,master_t:[1,3],master_uri:5,match:[1,6],math:0,mean:6,media_url:3,memori:0,mention:3,messag:[1,5,6],message_typ:6,method:0,missing_command:1,modul:4,more:[1,3],multipl:[1,3],music_data:1,must:[0,5,6],name:[0,1],need:1,net_request:6,network:[1,4,6],network_handl:[1,6],network_handler_dict:6,networkerror:5,networkhandl:6,next:[0,1],nid:5,no_warn:0,nobodi:5,node:5,non:6,none:[0,1,3,5,6],noplaylist:0,notconnectederror:5,noth:5,notidentifiederror:5,notimpl:[1,6],now_plai:0,nullabl:3,nullcommand:[1,2],number:[0,5],object:[0,1,3],offset:1,onc:[0,3],onli:6,option:[0,1,3,6],opu:0,order:0,org:3,other:1,otherwis:[0,1,5],outtmpl:0,packag:5,packet:5,page:4,paramet:[0,1,3,5,6],pass:0,password:3,path:3,pattern:6,pcm:0,per:0,perman:0,pickl:5,pickleabl:6,pingcommand:2,plai:[0,1],playcommand:2,playlist:0,playmod:0,playmodecommand:2,plu:6,plusformat:6,pool:0,port:5,presenc:1,primary_kei:3,probabl:[0,6],properti:0,quiet:0,quot:3,quoted_account:3,quoted_account_id:3,ragecommand:2,rais:[1,5,6],raise_on_error:5,random:0,read:0,reason:5,receiv:[1,5,6],recommend:0,relationshiplinkchain:3,relationshipproperti:3,remindercommand:2,remov:0,repeat:0,replac:6,repli:[1,5,6],repres:[0,1],request:[1,5,6],request_handl:5,request_uri:5,requesterror:5,requestsuccess:5,requir:1,require_alchemy_t:6,require_at_least:6,required_secret:5,rest:6,result:6,role:3,rout:5,route_packag:5,row:6,royal:3,royal_id:3,royalnet_config:1,royalnetconfig:[1,5],royalneterror:5,royalnetlink:[1,5],royalnetserv:5,royalpcmaudio:[0,1],royalpcmfil:0,rpf:0,run:[1,5,6],safefilenam:6,safeformat:6,search:[0,4],second:6,secret:5,select:[0,3],self:1,send:[5,6],sent:[1,5,6],sequenc:[5,6],serv:5,server:5,servererrormessag:5,session_acm:3,session_cm:3,session_end:6,session_init:6,set:[1,3,6],shipcommand:2,should:[1,5,6],signal:0,singl:[1,3],skipcommand:2,sleep_until:6,smecdscommand:2,someth:5,somewher:5,song:[0,1],soon:0,sourc:[0,5,6],source_conv_id:5,specif:[1,6],specifi:[1,6],spoiler:3,sqlalchemi:3,start:[1,3,5],starting_class:3,starting_list:0,starting_pool:0,statement:3,statu:1,stereo:0,still:6,str:[0,1,3,5,6],string:[0,3,6],subbot:6,subclass:0,submodul:3,success:5,summoncommand:2,synccommand:2,tabl:1,task:1,telegram:[1,3],telegram_config:1,telegrambot:1,telegramcal:1,telegramconfig:1,termin:5,text:[3,6],tg_id:3,than:6,thei:6,them:3,thi:[0,5,6],those:0,through:5,time:5,timestamp:3,titl:0,token:1,tupl:3,type:[0,1,3,5,6],uid:3,underscor:6,union:0,univers:6,unregisterederror:6,until:[0,6],updat:1,update_activity_with_source_titl:1,uri:3,url:0,use:[0,3],used:[1,3,6],useful:0,user:6,usernam:3,using:1,usual:[0,5],util:[1,4],valu:[0,3,5],variabl:1,veri:0,video:0,videochannelcommand:2,videoinfocommand:2,videos_left:0,voic:1,wai:0,wait:6,want:0,warn:0,wasn:5,websocket:5,websocketserverprotocol:5,went:5,when:6,which:[0,5],word:6,worth:0,wrapper:[0,3],wrong:5,yet:5,yield:0,you:0,youtub:0,youtube_dl:0,youtubedl:0,ytdl_arg:0,ytdl_filenam:0,ytdlfile:0,ytdlinfo:0},titles:["royalnet.audio","royalnet.bots","royalnet.commands","royalnet.database","royalnet","royalnet.network","royalnet.utils"],titleterms:{audio:0,bot:1,command:2,databas:3,indic:4,network:5,royalnet:[0,1,2,3,4,5,6],tabl:[3,4],util:6}}) \ No newline at end of file diff --git a/docs/html/utils.html b/docs/html/utils.html index 383725fe..18ffdf40 100644 --- a/docs/html/utils.html +++ b/docs/html/utils.html @@ -277,18 +277,32 @@ The data must be pickleable.

    -royalnet.utils.sleep_until(dt: datetime.datetime)
    -
    +royalnet.utils.sleep_until(dt: datetime.datetime) → None
    +

    Block the call until the specified datetime.

    +
    +

    Warning

    +

    Accurate only to seconds.

    +
    +
    royalnet.utils.plusformat(i: int) → str
    -
    +

    Convert an int to a string, adding a plus if they are greater than 0.

    +
    +
    Parameters
    +

    i – the int to convert

    +
    +
    Returns
    +

    The resulting str

    +
    +
    +
    class royalnet.utils.CommandArgs
    -

    The arguments of a command. Raises InvalidInputError if the requested argument does not exist.

    +

    The arguments of a command. Raises InvalidInputError if the requested argument does not exist.

    joined(*, require_at_least=0)
    @@ -320,7 +334,8 @@ The data must be pickleable.

    royalnet.utils.safefilename(string: str)
    -
    +

    Ensure a string can be used as a filename by replacing all non-word characters with underscores.

    +
    diff --git a/royalnet/__init__.py b/royalnet/__init__.py index 77d348d3..5f091505 100644 --- a/royalnet/__init__.py +++ b/royalnet/__init__.py @@ -1,3 +1,3 @@ -from . import audio, bots, commands, database, network, utils +from . import audio, bots, commands, database, network, utils, error -__all__ = ["audio", "bots", "commands", "database", "network", "utils"] +__all__ = ["audio", "bots", "commands", "database", "network", "utils", "error"] diff --git a/royalnet/network/royalnetlink.py b/royalnet/network/royalnetlink.py index 2b6c2479..5edab494 100644 --- a/royalnet/network/royalnetlink.py +++ b/royalnet/network/royalnetlink.py @@ -17,7 +17,7 @@ class NotConnectedError(Exception): class NotIdentifiedError(Exception): - pass + """The :py:class:`royalnet.network.RoyalnetLink` has not identified yet to a :py:class:`royalnet.network.RoyalnetServer`.""" class NetworkError(Exception): diff --git a/royalnet/utils/commandargs.py b/royalnet/utils/commandargs.py index 63a02b2f..46b40432 100644 --- a/royalnet/utils/commandargs.py +++ b/royalnet/utils/commandargs.py @@ -4,7 +4,7 @@ from royalnet.error import InvalidInputError class CommandArgs(list): - """The arguments of a command. Raises InvalidInputError if the requested argument does not exist.""" + """The arguments of a command. Raises :py:exc:`InvalidInputError` if the requested argument does not exist.""" def __getitem__(self, item): if isinstance(item, int): diff --git a/royalnet/utils/plusformat.py b/royalnet/utils/plusformat.py index ef5ba0b9..7c14627f 100644 --- a/royalnet/utils/plusformat.py +++ b/royalnet/utils/plusformat.py @@ -1,4 +1,11 @@ def plusformat(i: int) -> str: + """Convert an :py:class:`int` to a string, adding a plus if they are greater than 0. + + Parameters: + i: the :py:class:`int` to convert + + Returns: + The resulting :py:class:`str`""" if i >= 0: return f"+{i}" return str(i) diff --git a/royalnet/utils/safefilename.py b/royalnet/utils/safefilename.py index 3f6d8e2f..da3e78e7 100644 --- a/royalnet/utils/safefilename.py +++ b/royalnet/utils/safefilename.py @@ -2,4 +2,5 @@ import re def safefilename(string: str): + """Ensure a string can be used as a filename by replacing all non-word characters with underscores.""" return re.sub(r"\W", "_", string) diff --git a/royalnet/utils/sleepuntil.py b/royalnet/utils/sleepuntil.py index 7b6189cb..63d08ed0 100644 --- a/royalnet/utils/sleepuntil.py +++ b/royalnet/utils/sleepuntil.py @@ -2,7 +2,11 @@ import asyncio import datetime -async def sleep_until(dt: datetime.datetime): +async def sleep_until(dt: datetime.datetime) -> None: + """Block the call until the specified datetime. + + Warning: + Accurate only to seconds.""" now = datetime.datetime.now() if now > dt: return