Making a music bot in C# using Victoria + Lavalink (Discord.NET)

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
okay and okay there we go [Music] um okay guys i wait a little bit okay oh okay it doesn't show that okay i okay i'm going to be using victoria because sharp link sucks it actually does suck between the two hi why does it not show up here okay it's delayed for some reason i have my um my surface probe with the chat and for some reason on my desktop it doesn't show right away i do hear feedback right now um should be this one now i shouldn't be hearing feedback right um i don't use voicemeer that much um i think i think that's right hopefully uh yeah i think so i think we're good okay okay okay okay so so victoria from i've used it before like a long time ago maybe two years ago i believe i still hear the feedback i still hear the feedback and i'm upset um should be is that better okay that should be better okay i'm not hearing any feedback okay we should be good okay okay yeah we should be good okay um hopefully in liking audio yes i am okay okay what was i saying okay so i've used victoria before but it's been like a long time and from what i remember is that you have to have lava link like a lava link server and um i think it was the reason why i was having so much problems before was because i was using the wrong java version apparently because i looked at the java version for the lava link server and apparently you need to have it works best with java 13 and i think i was using java 11 which it does claim that there's some issues with it with discord's tls um so i'm hoping this works better i'm probably going to be using a lot of drax codes like just a little bit here and there because i have not done this in a long time so i'm going to probably be going off of what he has right now this is like his older code i think this one he updated it but i remember this being um like this was like three years old i believe i'm going to also be referencing off of the victoria's docks as well um because that's good and they actually do have some nice stuff here like quick start here and everything um i am going to be using discord.net which is lovely i really do love discord.net and i'm using writer it's my ide and i'm just going to start now okay i have to squirt on that and i'm just going to have it be called kokoro for right now i don't know why it's there's two names i use for my bots that's panda 2.0 or kokoro i don't know why i do that um do i need anything else uh this doesn't look like i need that okay so then i need victoria okay um we're making actually i'm gonna make a new directory let me know if the music is too a little bit too loud i had to mess a little bit with the settings earlier um core and i'm hoping this like where i have my mic right now is good i'm hoping this is better than it was before um very close be bought um i'm trying to think here um any private need be a private discord socket client and i'm going to have this be quiet actually uh do i want to get inside here um i don't really need to because i'm gonna have a service manager so no i don't need it i need also have a private command service and this is going to be called command service um we're going to make a whole like a static class so then it's easier to do everything with that so public bot so client yeah okay it does okay i don't know why i have both chats open here and here i need to figure this out eventually um so it's going to be client we need we need to initialize the client there's a new discord socket client which means a new discord socket config which i'm going to have log level would be i'm going to have it be debug and we also have a command service it's going to be a new community service with the news command service config log level is going to also be uh debug case sensitive i'm going to have that be true so the difference between uppercase h and lowercase h for like a help command uh run mode i'm needing that to be async i'm gonna also have it ignore extra arguments so uh discord.net has a problem where if there's extra arguments it complains so this just actually just removes that complaining um and then we can i can come over here and make a new directory and we're gonna call the speed managers so we have multiple managers okay and then we're gonna add here is gonna be the service manager and this is gonna be a style class so referencing it as a type instead of the instance and we're going to have to be a public static um service provider service ah actually i want this be private okay and then i also need to have microsoft dependency hi it's so weird having my phone camera right in front of me and looking at both sides but hi i need that i need that for services so i can actually get the correct service because of how this works it's really weird that you you can't really get the service from the dot get service you actually have to use the dot get required service it's i don't know why it's like that i i don't know if any of you guys know why if you do can't explain that because i have no clue why they have two methods and i'll i i don't know why it's like that um when you do public static um avoid set [Music] set provider i'm trying to think this uh it should be a service collection collection and then this is grant it's actually looked better if i did that then i can do is service equals collection dot build service provider and i can do public static um and it's gonna be generic type so it's gonna be t get service uh and then we have it be that's generic type um and then i'm going to have it be aware t is new and i can say here is service docket required service t there we go and then i'm gonna also do here is um actually i can just make this be a get a getter so i can do public um static i service provider services or i can say provider instead i'm going to do a guide here okay and then there seems to be some problems here that's because of this this should be provider now uh is it complaining because i don't have the prop the um does it have the right permission okay provider okay you know what i don't even need this right here okay now i can be upload okay there we go much better okay we're good now okay so we have that um and i can go to bot now and then what i can do here is um var collection sequels to a new service collection uh don't add singleton somewhere inject i'm gonna put in the client and the command service and i also need to inject the lava node and lava config i believe i remember i have to do that i have to do something with the services it's right here uh don't add lava node um what version would that be this is version 5.3 what version am i uh i think this is version i think this might be version 5.1.3 okay uh but anyway so i have to do that collection dot add singleton and do command surface here collection dot add lava node okay so i am 5.1.3 okay that's good so i do not know exactly how this works but we'll find out self def so i'm assuming that's going um def in the bot and then i'm going to service manager dot set provider and then that will be collection so now i have the collection to be global and i can access this anywhere and i'll have to actually uh initialize stuff which is nice because um before how i did it was i initialized stuff in the confit not config the constructor but doing it this way i can actually just declare the variable the class variable and then actually assign it without having a constructor which is uh shorter to do i don't know why i explained that but there we go um now i need is a public async task and then i need to do is main async and then i do need a config manager okay and then this is going to handle all config stuff which is token and prefix basically i'm going to have to cut here so i can do it because this is going to create the file for me where it needs to be which is usually in the band folder under debug i believe and then not um net core app 3.1 something like that i don't remember um off top of my head even though i just worked with it like not too long ago um i want my spacing right here oh yeah i needed to have a constructor and that constructor struck uh should be public struck and then this is going to be called config public string token get i get and then we're into a private set string prefix get and private set i do need to i want to do json properties so json property it's going to just make this be lower case so when it creates the file it's and when it looks for reading it it will look for all lowercase okay and then when you do here is i'm going to private static string config folder we're going to call the speed resources private static string config file config.json site string config config path it's going to be config folder and config file um and this is gonna be a public um static font config config it's going to be a public get and a private set i'll need to do that and then i can now do is a static config manager now i need to check to see if the config folder exists if not i need to create it so i need to do is if not directory dot exists config folder that i'm going to create so i need to do directory dot create directory config folder out and i'll need to announce here i need to do an if i need to check see if the file exists so that's why i made the config path is so i can so i don't have to keep writing config plus um quotes slash plus config file i can just say config path and it will reference that for me so i can do file dot exists so if it does not exist and i want to check see if config path so config file if it exists or not if not i need to check and then i want to say if it does exist so if it does not exist that i want to do is config is equal to a new bot config so that's going to make token and prefix be null which layer i can do a check for the token to make sure before it executes that it's not null or empty and basically that allows it just grade it and stop and then i can go and put my credentials in basically um now what i can do is if our json equals json convert dot i need to serialize object and it's going to be config i spell something wrong here okay um then i can do file dot write alt text i can right alt tags and it's going to be config path and it's going to be json and i forgot to do one more thing here i wanted to do some formatting so i need to do format dot indent because if i don't do that it's going to be all in one line like always okay now that's done now i'm just going to say if it does exist i want to read it so it's going to be bar json is equal to file dot read all text and it's going to be config path then i can use config is equals to json convert dot d serialize object type is going to be config and it's going to be json so now i have that so that's going to create the file so it creates the folder if it does not exist creates the file if it doesn't exist then puts in the um the information in and it has token prefix speed null and then if it does exist the file then we're going to read the file and we're going to pass token the lowercase token as token and put in the value of it as assign it to the variable token same thing with prefix we're going to do that so this is actually um it's it's it's a complicated way in the way but it still makes it pretty easy to do so now i can do is if string dot is nor white space and i can do here is config manager.config.token and that's going to check to see if it's null or white space if it is it's going to return true so in this case um we want to make sure it does not execute so it's going to return and that means that it's created the file now and there's nothing in it okay now i can use a weight um client dot login async token type is going to be bought and then i'm going to config manager.config.token and i need to do weight client dot start async i also need to put in a weight task dot delay all i have to do here is negative one the reason i have to have that there is because um technically once after the await client uh does start async after once that executes it's going to exit out because um that's what it's supposed to do it's actually supposed to it's supposed to be done after that but we don't want it so we have to actually uh delay it and we have to put minus one which makes sure that it continues infinitely so it's kind of like a workaround i would assume i don't know but anyways now i can come over here and change this okay when you bought dot many sync dot get a waiter dot get result because you can't have a task or you can't i have the main method or a stack method to or is a constructor also can't um be async it can it's only sync so i have to do that okay run it real quick should it should stop here okay and then i can go to solution here file should be in ben resources okay so it's right here i'm gonna make the prefixes yeah that's fine that's fine i don't know why you had to ask me that but i'm gonna have uh it be like that and then i'm going to quickly all right i'm going to put up the screen real quick so i can put my token in so give me a second thank you okay now i put that let me put this back in solution and then i can rerun it now and it should be fine i'll open that real quick to quickly come over here let's see here okay so it's online now so that's good okay that's good okay so i got that part down now i need to add the events command handler and then i have to do the um the audio manager so i'm going to first do the command manager because that's like the easiest one to do it's also going to be a static mess with managers and where it makes side because it's just easier doing it that way um and then i can do private static command service command service it's equals to service service manager dog head service and then i can do command service there we go and then i can do public async or a static task and then load commands async and then basically i can just do command um i actually need to i need to await it so anyway command service dot add modules and then that's going to be assembly dot get entry assembly so it's going to get based off i think the root directory i believe what it's going to do and then from there i can do is um service manager dot provider okay then that's it that's all i need to do here what i'm going to do is for each so i'm going to have the four each tell me what commands was loaded so now i can do command service dot commands command i don't need braces here because i like doing two line here console dot right line it's a right not line okay uh need to do the dollar notation because that's how we inject objects into a string uh command and this can be command dot name was loaded okay so there we go i don't feel like i need to add the log the assist as subscribers for the command service here don't feel like that's necessary to be honest but anyway so i do wait and i can do command manager download commands async now i can do is the event manager this is also going to be static i can do is a private site discord socket client i'm going to client here screen equals the service manager dot get service and it's going to be discord socket client private static command service uh it's going to be command service is equal to service manager dot get service it's going to be command service public static uh not a sync because i don't need it to be async i'm just going to [Music] uh it's going to just be a task and it's going to be load commands so that if i do that that means i need to return a task a complete task because uh async tasks technically is avoids um as a void type so it doesn't need to return anything whereas task by itself is a return type okay so from there now i can do is clamp i'm going to i'm going to add the subscriber for the log on the client so i'm going to do this okay i'm going to just do that and that also needs to be a return task dot complete task console.write line and then i'm going to do here is um i think i can do date dot now and then we're going to do backslash tease for tab then i'm going to do is um message dot source tab again and it's going to be message dot message okay there we go i actually do feel like i need to do it but i can just for the command service i can just do that in here be easier i'm just going to copy this because they're basically the same thing now i'm going to use the client.ready and we're going to create the method and we're going to call this be on ready then this is going to be async and then we can use console.writeline oops okay so this is going to be uh date time dot now the source is going to be ready slash t and then i'm going to do is client or bot is ready and i can do here is a weight client dot set status and i'm going to just keep it be online i usually like just bring this here just in case if i need to change it later on client.set i uh should be game activity on discord.net it's weird it's a little bit more difficult than doing it with game and then i can do here's prefix and it's going to be config manager.config.prefix okay there we go i can actually change the type actually so this should be null and then i can do type here uh activity type actually it's just going to be listening here okay there we go now i need to use the client dot message received grant create a method for that on message received and this should be async task okay there we go okay now i need to use our message is equals to arg as socket user message then you have our context is equals to a new socket command context and this is going to have client and screen also have the message in here now i need to do is if message dot um should be user nope author dot is bought so it's going to check to see if it's a bot or message dot channel so the type is going is if it is uh idm channel then we want to return i don't want to deal with that right now okay so i did that so now i need to do an int our pos is equals to zero so i can refer it or reference it basically i don't need to have it here you can just have bar here then i need check c's if let me do not here parentheses because there's going to be two of them we're going to check for string on prefix and message mention prefix so what we're going to do here first is the string prefix so the message dot has string prefix and it's going to be config manager.config.prefix and then we're going to refer to um our pause or message that has mentioned prefix it's going to be the client client dot current user and we're going to refer our pos return i do know that i'm missing one parenthesis there there we go okay now i can do var result the screen equals a uh it's going to be a weight man service dot execute context our pause and service manager dot provider and then i need to do some error handling so if result is not result dot is successful so if it's not then we're going to assume there's an error if result or actually don't need not there because i want to check to see if it is result.air is equal to command dot air unknown command then i'm just going to return i'm i don't need to do any more error handling here that's the only one i know that's probably gonna be present because the other ones um will be fine because i have the ignore extra argument um problem okay so i did that so now i can go back to here and i can load those in so i can do weight event event manager dot load commands i don't think i do need the weight here i might don't remember i'm just gonna leave that there and now i can do the audio so audio manager okay here's the fun part okay let's see here that is not what i want so i'm gonna have to use drax's code a little bit see what he did exclusive private read only lava node love node so that's coming from the command service right no because it's sealed where's this coming from probably from here private breed only okay so we required okay so there's that so bot service maybe um no program.cs nope that's initializing the the discord service okay and it's coming from here initialize async subscribe to square events ready async right here so ready async he does away lava node.connect okay so i'm going to do the same okay so i need to do here's a try catch so i'm going to try oh but i do need to have it in here so private static lava node lava node is equals to service manager dot get service lava node uh what does it complain about uh must be a public parameter list in order to use it as a parameter what okay interesting um i think i have to do it the other way around then i might have to do dog get provider dot get required service uh lava node it looks like i did it that way which is fine that's why i made it be public in the first place um now i can do lava node dot was it connect right yeah connect async and i need to do catch here so i'm going to do catch exception and then we're going to call zx and i'm just going to use a throw a new exception ex or i can just do ex here no i just do throw the x there we go okay so i did that looks like he added a lot of config but this is an older version from what i remember models audio models service i want lava link audio okay so we did that so i did all that now so i can go back to here okay so from here i need to do is a private read only lava node lava node it's going to be a service manager docket i actually have to do private or not private provider dot get required service it's gonna be the lava node okay public i don't need through that public async i can make this be static it looks like what is it complaining about it's probably talking about does not match rules um okay yeah i see i that's fine that's fine okay so the first thing is going to be here i do know that there's a event here that i need to do first so that is going to be right here so public async task okay then track ended and this does need to be a static track ended or uh track but wait uh this is using um uh something from here uh victoria dot event arts end of the event arcs okay there we go args okay so we did that so now i need to use an if rx dot reason dot should play next uh then we're just going to return here if args.player.q dot try dq uh let me do an out var cue ball okay if not q ball uh cuba is the type of lava track this can be track awaits dot player dot uh text channel dot send message async uh next item in the queue is not a track then i'm going to return here because that's how this works and then now we can do is an await arcs player dot play async track then i can do next is oh wait arcs dot player dot text channel dot send message async i'm just going to use a simple one i'm not going to make an embed really if i have time oh like a little bit later in the stream i will but for right now i'm not so i'm going to say now playing and it's going to be um just going to follow a little bit of his formatting track dot title and that's going to be and the description looks like because he's using markdown looks like yeah it looks like it's marked down so i'm just going to do this track.title and then we do this track dot author let me do that okay so we do that now we should be good okay so we did that so i did the event now um i don't remember if this is subscribing i think it should be subscribing to it from what i remember this is subscribing it doesn't look like it is okay public async task that's returning an embed which is fine i'm going to do that as well join async i guild guild i voice state voice state i text channel channel nice manifested channel here okay okay let's see here far in bed actually you know what you know what i'm just going to do a string i'm going to be a rebel there we go i'm a rebel now okay so if lava no dot has player guild then i'm going to return uh i'm already connected to a voice channel or i can just say vc here if my voice state now the voice channel is null return you must be connected to a voice channel and i can just join that down to pvc and then now i can do a try catch here it's kind of looking like the type is going to be exception ex return um air and i can do that and then i'm going to do ex dot message okay now we do a weight love a node.join async voicethevoice channel text channel or i just do channel here there we go so now we have a drawing here but there is a problem here it's going to complain because we need a return um join joined a joined it and it's going to be voice state dot voice channel dot name okay there we go what's it complaining about it's just uh needs to be static here now we do public static async task string play async okay a socket guild user it's gonna be called user i guild it's gonna be guild and string query which is gonna be the youtube video that they want okay so if user.voice channel is null return uh you must be you must join a voice channel or a vc let me do is an if lava node dot has player guild uh i'm not connected to a vc or i can say to the vc this should be a non statement try it's gonna be a catch here was the catch gonna be the catch is gonna be an exception ex return and then it's going to be um yeah air exit why is it like that i don't know why i did that uh there okay we're good okay that message okay there we go now we go back to here we watch okay so if user.voice channel is no all right i already did that why am i doing that again uh var player is equal to lava node.getplayer guild so i want to get the get the audio player looks like lava track track we create the variable but not initializing it it looks like for our search is equals to uri dot is well formatted string okay query url uh kind salute we're going to do conditional here looks like away lava node dot search async query or await lavano dot search youtube async query okay if search dot load status is equals to load sas dot no matches then we're going to return a string and it's going to be i couldn't find anything with um anything for query okay track is equal to search dot tracks dot first or default let me do here is an if player dot track is not equals to null and player up player state that is uh is player state playing for i think that's going to be pause maybe yeah it's pause thought so more player thoughts uh player site is playerstate.paused player dot q dot e and q and q track wait i don't need that it's for his console.write line and then this is going to be date time dot now and then tab then we're going to do source this is going to be audio and then what we're going to do is track was added to q and then we're also going to do is a return uh let me do track dot title has been added to queue okay so we did that now we're going to say what if it isn't then we just go and play it so player dot play async is going to be track okay then we're going to just return and then we're going to say now playing track dot title okay and we can also say console.writeline now playing track dot title okay there we go got all that done so we have that next command is going to leave command looks like so public async task string this also needs to be a static leave a sink and it's going to be an eye guild all right guild it's going to be called guild okay so now we need to try catch here okay that's going to be a invalid operation so invalid operation uh exception ex okay then we're gonna do var player is equals to lava node dot get player guild if player dot player state is player state dot plane then we're going to do is await player dot stop sync and then we're going to do is await lava node dot leave async player dot voice channel then we're going to do is um console.writeline and we're going to do date time dot now tab audio tab and then we're going to do is um a bot has left a voice channel or vc and then we're going to do is a return statement so we're going to return i have left the voice channel or vc and then right here we're going to do return air and then we're going to ex and stop doing ext stop okay that message okay there we go now we're gonna do some commands so we're gonna do directory commands then we're gonna add a music command class okay and then what we're going to do here is going to make it extend the uh module base and it's going to take a generic type of socket command context okay we're going to change the name so the name screen be music so if i ever were to make it a help command instead of showing music commands it would just be showing music okay now i need to command and i'm going to do join here then i'm going to do summary and um makes the bot join the vc that you are in now what i can do is a public async task join command and then i can do this and i can do um audio manager actually i need to wait here so wait audio manager dot join async and with the same so i need to do is a context.guild context dot user dot voice no no it should be guild thought let's see how he did it there's a certain way i you have to do it models audio manager how do you do it socket user as okay so okay user as i voice state we would type okay then you have context dots channel as a socket or i text channel okay command play summary plays um please a video from youtube okay public facing task play command and then these be a remainder so that means it's going to append everything into one so we don't have a um a string array string search then we're going to do a wait um actually any first do here is needs be await dot context.channel.com message async there we go i need to do the same here context.channel dot send message async always audio manager dot play async context uh what was it that i need it needs to be user so context.user as a socket guild user then context dot guild and query let me do is next to leave and i'm going to be done for today and such and i'll probably do this again another time but of course i need to test it leave summary leaves the voice channel or the vc public async task leave command wait context dot channel dot some message async await audio manager dot leave async it's going to be context dot guild okay so we did that okay then there's problems what's the problem here does not exist that should be searched then there we go so we do that we're going to stop and rerun i have this and i need to run this um did it say it joined it doesn't say it over here i don't think um i think everything is fine let's see here let me first turn off this music brand new this so i don't remember if it needs url or if it's just a name or like the query search i do not remember i will not lie i don't remember i haven't done this a long time but anyway so i can do k join and i'm going to join the voice channel uh problems because you guys can hear it should be right here and right here so if i do k drawing i still not games audio how come am i not getting any audio over here anyway so i'm going to do k play okay there we go we are getting audio and it's working perfect now if i were to decay leave and left and if i do k join shouldn't play okay okay play i'm going to do that again so it's working okay perfect i mean i can continue doing more if i really want to and let's just do it for funds of it okay we're gonna clear that real quick and then we're in stop playing that i know yeah i can do volume i was going to do that so right now i'm just more just doing what programmers do looks like someone else's code and starts copying and pasting it in control c and control v here that's why i do right now okay it's not too bad so public async task string i'm going to set volume async this does need to be a static class because it's inside a not psyclastic stack method because it is in a sad class okay now i can do a guild my guild guild and volume okay then we're going to do is volume so if volume is over 50 or volume volume is is equal to or less than zero then what we're going to do is we're going to return a message well string which is going to be sent later on in the command um it's going to say volume can only be between one and one hundred and fifty um not 115 150 okay now we're going to do a try here try catch we're gonna do catch here exception ex my music stop playing i don't know it's supposed to do that okay we're good almost starts panic right there then we're going to return ex message var player is equals to lavano get player guild only player dot update volume async needs to be you short which is a int or you in 16 so it's unsigned so it can only be positive it can never be negative okay then we're going to use a console.rightline and then we're going to say here is well we need to do the format first so it's going to be date time dot now tab audio tab and then we're going to do here is um bot volume volume was set to volume okay then we're just going to return volume has been set to volume okay so we did that now i can go back to the commands here let me do a public well first need to do the command it's going to be volume i'm also going to have the alias and then we're just going to call it ball then we're going to have there be a summary not summary attribute but summary and it's great um people so um changes the bot's audio volume public async task and then it's going to be volume command and this does need a parameter so it's going to be an int volume and we're going to do the weight context dot channel dot send message async await audio player dot set volume async volume uh what is it complaining about that's two parameters of course it needs to be a context.guild like always there we go now we play here we're not play but we do that okay here we go stop my music again copy copy that so i'm going to do now is okay drawing but first need well let me test see if this will work okay okay join i'm going to join the voice channel now okay okay join during k play now uh that's going to throw errors right okay okay ball and i'm going to make it b with 250 here what 50. was weird i don't know if any of you guys heard that but that was weird uh okay with a hundred but there's some difference there i don't know if you guys can hear it why did i do that uh let's do that there we go so 150 it's going to be blaring yep so we're going to have it be like that that's good okay i'm gonna have it to k leave okay there we go put this music back up okay let's here now i have to do the pause and resume but i feel like i'm going to make it be a toggle because that is easier to do then so what we're going to do here is um public async not right here this is the message the music commands i'm going to be an audio manager and then what i'm going to do i'm going to do it up here we're going to public static async task string it's going to be toggle um pause async i mean i guild guild okay so i need to do is here is a try try catch and this is going to be a invalid invalid operation exception ex okay and then we're just going to return it now ex message okay there we go now when you do here's a bar player she goes to player guild okay so now what i need to do is check to see if it's playing or if it's pause so it's easier to check to see if we'll need tracy whether player status because i do need i do believe i need some type of error handling here if i'm going to do it toggle um let's see here uh player dot state not stop but state player state is player state uh okay so i need to track no it doesn't seem like it so i just need to check c so if it's if it's not playing here then and if it's not playing and well if it's not okay so if it's not playing then we want to re we want to resume but i need to check c here so and player dot uh how do i check see if there's something in the first track let's see here okay so right here um so if players say is not playing okay so player.track is not null okay so if player dot track is not it's not equals to null so it's not null okay or actually i do want to check see if it is normal first because then i can error handle that it would be easier to hand error handle it oh wait and i'm wearing no wait i want to return um there is nothing playing currently okay okay so that's that okay so now i need to just check so if not player that player state is a player state dot playing then we're going to do is in the weight uh player dot resume async and then we're going to just return and we're going to say um what we will say um sure let's just quickly do this ctrl c ctrl v okay and then i'm just going to do an ounce if even though i don't really need that there but i'm just going to do it because why not or uh yeah and it is player state ah no i don't need it really i can just do an alps here actually technically this would be already announced because there's a return and not if so so we will just do um await player dot pause not play but pause async return shh no one needs to know this what yeah okay so we have that so we have a toggle basically so now what we can do here is um we can just do here is a public async not that but we can do is a command well yum now volume i want to um pause and i'm also going to do is an alias and i'm going to make it to be resume hmm all right um pauses slash resumes resumes soon the music player when we do public async task pause command and nope we don't need to do that i'm just going to do this it's going to be awake context dot channel dot send message async await audio manager dot toggle pause async and it's going to be a context dot guild there we go so i'm going to run this go ahead and run the jar file and pause my music real quick okay i do need go and copy this real quick okay okay bring this over here now i can do k join okay play going to do a pause here pause i can also do pause here resumes resume it's a weird system but it works for what it needs to do there's some buffer there i heard that it's okay leave okay okay we're going to clear this real quick uh i think i'm just going to do one more command which is going to be the sump command and then another time i'll just cue um the teal if we do have the stop command in this now i'm gonna have to do it off my head and i don't care i'm just gonna be done now okay i'm gonna be done yeah but i'm gonna be done as i realized i do believe i nope i did not okay okay well i'm gonna be done now you guys gotta see me complaining well i didn't really complain but yeah so yeah
Info
Channel: Koreanpanda345
Views: 1,592
Rating: undefined out of 5
Keywords:
Id: K0UMmoyOqZI
Channel Id: undefined
Length: 77min 37sec (4657 seconds)
Published: Wed Jan 20 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.