Python: Making a Discord bot (Part 7: Cogs)

  Рет қаралды 200,137

Lucas

Lucas

Күн бұрын

In this video, we learn about cogs and how to implement them in a discord bot.
If you have any suggestions for future videos, leave it in the comments below.
GITHUB: github.com/Rapptz/discord.py
DOCUMENTATION: discordpy.readthedocs.io/en/l...
OFFICIAL DISCORD.PY SERVER: / discord
JOIN MY HELP SERVER: / discord
#DiscordBot #Rewrite

Пікірлер: 496
@editedfalafel2434
@editedfalafel2434 3 жыл бұрын
ok for those who don't understand what cogs are, they're just codes that you load into your main code, i think it helps with sorting
@editedfalafel2434
@editedfalafel2434 3 жыл бұрын
@Nikhil Prem what he said
@waiitwhaat
@waiitwhaat 3 жыл бұрын
They're most useful for editing bot code dynamically. You don't need to kill the script everytime you want to make changed to the bot, which is very important once your bot is on many servers.
@ggentertainment2737
@ggentertainment2737 3 жыл бұрын
the induvidual files he put into the cogs folder are literally the cogs. if you take them out, the program within them will not run.
@razorzinho
@razorzinho 3 жыл бұрын
@@waiitwhaat Actually, not just that. Cogs are a way to divide your code and separate the structures in their respective place. This way, your code won't be a complete mess in a single 20000 lines of code file. Cogs are what makes your bot development be more efficient as well as its performance. When you have a problem, you don't want it to be in the whole source code, you want it to be where the problem is coming from; this is efficient programming. So, besides what's completely essencial (the bot setup and the Cog loading functions) every single thing you have on your bot (modules, commands, events) should be made in Cogs
@landonrivers
@landonrivers 2 жыл бұрын
@@razorzinho what's an example of some cogs I'd want to make?
@MatshaSeal
@MatshaSeal 4 жыл бұрын
this was great! I was reading the documentation over and over and saw examples but I was still lost, watching you explain and run it really cleared things up for me. Thank you for making this tutorial
@lyndensylvester9194
@lyndensylvester9194 3 жыл бұрын
@Lucas, I spent upwards of 7 hours trying to figure out cogs last night, but I only now understand them thanks to you. You explain things really well and are a great teacher in terms of coding. Love your videos! They're really helpful and I hope you achieve your ambitions! Have a wonderful day!
@waiitwhaat
@waiitwhaat 3 жыл бұрын
it's 3am and now i can finally go to sleep. Thankyou so much!!!!
@LimonluMentos
@LimonluMentos 3 жыл бұрын
3:10. Not going to sleep.
@Daniel-yp6mm
@Daniel-yp6mm 2 жыл бұрын
@@LimonluMentos 4:40 going to bed now
@fellox7866
@fellox7866 5 жыл бұрын
Just at the right moment Lucas! I was trying to do a activate/deactivate commands, thanks for showing us about cogs! Edit: Maybe you can do a video about embeds or handling errors of command checks
@rodoaravena
@rodoaravena 2 жыл бұрын
This tutorial is amazing! I have been searching something like this for days. As a teacher, you have those skills for teach very right. Thank for make this, now I can manage cogs very well. Thank you so much! Greeting from Chile 👋
@gapetto
@gapetto 3 жыл бұрын
I'm starting out new to Python AND Discord bots but figured I'd toss myself in and learn both at once (not new to object orientated programming). Whenever I came across "cogs" I couldn't get my head around how to properly use them until now thanks to this video! Now I can continue writing the bot without having to restart it for every change... just issue the unload and load commands!
@th3mediocregamer116
@th3mediocregamer116 4 жыл бұрын
Thanks for this explanation of cogs. It's really helped me make sense of what I can do. Great job!
@evan.5967
@evan.5967 3 жыл бұрын
Thanks!
@bozoboys4
@bozoboys4 3 жыл бұрын
Bruh, this video deserves more views, I was so lazy to read the docs so I just went to your channel.
@list9016
@list9016 2 жыл бұрын
but it's a pretty bad practice, docs are always the way to go when learning about something. but sometimes when your completely lost even with reading the docs i guess its fine
@enigmalea
@enigmalea 3 жыл бұрын
Thanks for the tutorial. The load and unload commands you created in the main file were genius.
@imadafzal3368
@imadafzal3368 3 жыл бұрын
Very nice explanation! it helped me a lot, I could not understand from the documentation so this video really came in handy.
@yollaifliandry495
@yollaifliandry495 4 жыл бұрын
Maybe Cog is not easy to be explained in words. But your code is talk and teach very clearly. Honestly, at beginning, I was little bit afraid about Cog tutorial. I never hear it before. Just follow your code, I think people can understand concept of Cog and how to make it. Thanks for this Discord bot tutorial (Cogs)
@killian7486
@killian7486 2 жыл бұрын
Completely refactored my bot after this video. Loving this series.
@ThatAnArchyDude
@ThatAnArchyDude 4 жыл бұрын
Ummm...I watched the entire video, and I'm still unaware of what a "cog" IS.
@RishaadKhan
@RishaadKhan 4 жыл бұрын
a cog is a class that is defined by commands.Cog. It is used to organize information and store it like a dictionary.
@ThatAnArchyDude
@ThatAnArchyDude 4 жыл бұрын
@@RishaadKhan I need to watch this again then. That sounds like it'd be extremely useful for my goals.
@ThatAnArchyDude
@ThatAnArchyDude 4 жыл бұрын
@@MelodyParadiseNightcore Now... I'm lost again.
@ThatAnArchyDude
@ThatAnArchyDude 4 жыл бұрын
@@MelodyParadiseNightcore I think I'm still waiting for the second half of that second statement. Lol Thanks though.
@wild1000022
@wild1000022 4 жыл бұрын
@@ThatAnArchyDude Kind of late, but its modules that can be unloaded and loaded on the fly
@TheDarkSideOP
@TheDarkSideOP 2 жыл бұрын
for file name in os.listdir('./cogs'): If filename.endswith('.py'): bot.load_extension(f'cogs.{filename}')
@archivedaaliyahwolf1544
@archivedaaliyahwolf1544 3 жыл бұрын
I have officially subscribed, thank you for these videos!!!
@umarsalmanrao5
@umarsalmanrao5 2 жыл бұрын
Never stop making videos brother. Thanks a lot!
@LoloCreates
@LoloCreates 4 жыл бұрын
Great tutorial, I would love a tutorial about using APIs, specifically the google calendar API with a bot
@wild_greebo
@wild_greebo 2 жыл бұрын
Having previously watched tutorials on coding State Machines for Unity really helped conceptualise this. Great video thanks!
@johnlagou5362
@johnlagou5362 3 жыл бұрын
Excellent videos mate keep up the good work!
@notlookme
@notlookme 3 жыл бұрын
Thank you so much! I can finally organize my code!
@PrevalentAA
@PrevalentAA 3 жыл бұрын
you don't need to put the unload and load functions inside the reload function because there is already a built-in reload function. So just define it like a normal load/unload function.
@dimitri07-r1g
@dimitri07-r1g 2 жыл бұрын
Thank you so much, talented guy! ♥ Also, you just earned a subscriber:)
@kyayaarmahi
@kyayaarmahi 3 жыл бұрын
THANKS A LOT FOR THIS SERIES!
@terry2221
@terry2221 3 жыл бұрын
this series is golden 💰
@qdh
@qdh 2 жыл бұрын
thank you, lucas. was really helpful
@Nomissimon10
@Nomissimon10 4 жыл бұрын
What if you want to pass a parameter into the cog, lets say a database class. How would I go about sending this when loading the extension?
@longtoZ
@longtoZ 4 жыл бұрын
Very informative =) THANKS
@jasperzanjani
@jasperzanjani 3 жыл бұрын
6:00 - 7:00 I would say a list comprehension and perhaps use of the glob module would be preferable here
@shreygupta296
@shreygupta296 2 жыл бұрын
This helped me, thanks!
@standingpad
@standingpad 3 жыл бұрын
For anyone on Windows with a error saying it can't find cogs: 1. Make sure you have a cogs folder 2. Run the bot with command prompt. A trick is to go in file explorer, then the folder the bot is in(not the cogs folder), click the folder icon next to the file oath on top, type cmd, and it'll open command prompt with it already in the bot file. Then you do python(or python3) bot_file_name.py Also if client.something_here doesn't work, make sure you have it set to self.client.something_here
@shs168
@shs168 3 жыл бұрын
Thanks a lot! Helped me
@clee1227
@clee1227 4 жыл бұрын
Me who code: mention cogs My NSFW friend: think I mean *that* word
@omegamagna
@omegamagna 4 жыл бұрын
discordpy.readthedocs.io/en/latest/ext/commands/cogs.html
@KnownAsReal
@KnownAsReal 4 жыл бұрын
your friend is not safe for wumpus
@V_ice
@V_ice 4 жыл бұрын
a cock hmm i heard they taste bad 😂😂😂🤣🤣🤣
@codeforest9027
@codeforest9027 4 жыл бұрын
@@KnownAsReal xD
@kickyouinthegrass4672
@kickyouinthegrass4672 3 жыл бұрын
@@KnownAsReal you made my day lmao
@CHRNBRY
@CHRNBRY 2 жыл бұрын
Oh... I'm so gratefull to you for this tutorial
@DuneDiscord
@DuneDiscord 3 жыл бұрын
You helped me a lot thank you
@BombasticTom492
@BombasticTom492 3 жыл бұрын
This video is really interesting!
@zackshdw
@zackshdw 3 жыл бұрын
Very Helpful!!!
@kyayaarmahi
@kyayaarmahi 3 жыл бұрын
I FINALLY UNDERSTOOD WHAT COGS ARE!!!
@macaw2000
@macaw2000 5 жыл бұрын
Love the series. Can you go over help commands? So when users ask for help on a command it returns something nice?
@evan.5967
@evan.5967 3 жыл бұрын
By default, if you have cogs, there will be a help command in discord.py! Just use help if necessary! I'm here to answer any further questions.
@feschber
@feschber 4 жыл бұрын
how can I have a bot that can send messages by calling a function? is that even possible?
@real.xplo1t
@real.xplo1t 3 жыл бұрын
For those of you who are getting the cog error, I fixed mine by simply saving the example.py file. I forgot to save it and directly ran the bot.py file due to which the error came
@pauloh422
@pauloh422 3 жыл бұрын
Ty
@real.xplo1t
@real.xplo1t 3 жыл бұрын
@@pauloh422 you're welcome. Glad I could help :)
@4TH4RV
@4TH4RV 3 жыл бұрын
YOURE A LEGEND. I was so confused whats wrong with the code and spent half an hour googling
@dapz
@dapz 4 жыл бұрын
At 12:39 I had burped and then I thought you said "you burped". Freaked me out for a second.
@dagdbot83
@dagdbot83 2 жыл бұрын
Dapz is a programmer confirmed
@shauryaa2956
@shauryaa2956 2 жыл бұрын
For people who don't understand what cogs are; Think of them like command handlers, a way to organize your code and simplify it
@blkkkwolf
@blkkkwolf 3 жыл бұрын
This video is a life saver.
@woofelator
@woofelator 5 жыл бұрын
Is this easier than just writing methods in different files and then calling them in the main file?
@victortang5076
@victortang5076 2 жыл бұрын
with developed version of d.py, you now need to "await" load_extension, how can we do this with the automatic loading system you created up there?
@parmo5529
@parmo5529 3 жыл бұрын
so uhm... i put all my commands into my cog but latency is no longer a thing? (i changed the client to commands since it's in a cog)
@w.cherrius
@w.cherrius 2 жыл бұрын
I think my biggest question would be whether I should even transition...the difference between how you code with and without cogs is insane.
@slunkie7399
@slunkie7399 3 жыл бұрын
I just use the standard idle how would you separate folders for the cog
@itzparqr1592
@itzparqr1592 3 жыл бұрын
GET THIS MANS SOME MORE SUBS
@pazurkota
@pazurkota 3 жыл бұрын
Thanks, now my bot files will be more clever
@benjaminredmond812
@benjaminredmond812 2 жыл бұрын
what do I do for folders inside the main cogs folder?
@nft-tesla
@nft-tesla Жыл бұрын
Great, @Lucas, I have a question about cogs, how a cogs class itself detects reload or unload?? because there is a loop/ background task in it, I would like to klill the loop while class unload / reload. thnaks
@trust9482
@trust9482 4 жыл бұрын
So as far I comprehend, I can create a cog called 'Moderation', do all the code, add the commands I did in the bot.py, ctrl-c them, ctrl-v them to 'Moderation' and then in the .help command, it will appear under the 'Moderation' category?
@1grapefruit
@1grapefruit 4 жыл бұрын
Yes.
@blants_
@blants_ 3 жыл бұрын
yea it will
@cmrncrick
@cmrncrick Жыл бұрын
Can anyone explain what the difference would be between cogs versus extensions?
@selwynkessler7957
@selwynkessler7957 3 жыл бұрын
How can I add py files to a folder within the cog folder itself?
@HueJanus
@HueJanus 5 жыл бұрын
Can you make a leveling system again?
@kumaraloktiwari
@kumaraloktiwari 3 жыл бұрын
Thanks for the video
@Samimies
@Samimies 4 жыл бұрын
THIS IS TOO GOOD!!!!!!
@VerifyBot
@VerifyBot 5 жыл бұрын
Cogs for Command Handler is different, would you mind making a video about that?
@akemicake1746
@akemicake1746 3 жыл бұрын
How do i make a category for the help and the load and unload commands ?
@willibambam
@willibambam 3 жыл бұрын
I've done it with a ping command like yours. But for some reason, there's an error saying "Command raised an exception: AttributeError: 'Ping' object has no attribute 'client'"... Can you help me ?
@chasecolin22
@chasecolin22 4 жыл бұрын
So good!
@danielrushford4393
@danielrushford4393 3 жыл бұрын
One question - how would I get my bot to start without all of the cogs included? I've made my bot with all of the functions since the first video and I moved kick/ban to a separate cog but when I start the bot, kick/ban come with it. How would I start the bot without those two commands included - without the cogs included.
@liorschifrin
@liorschifrin 3 жыл бұрын
don't include the for filename in os.listdir part in the main bot.py file
@Pixeleer
@Pixeleer 4 жыл бұрын
How do I make hidden cogs that don't run when the bot goes online?
@zeffdebunked1072
@zeffdebunked1072 2 жыл бұрын
finally i made it work thanks dude
@fellox7866
@fellox7866 5 жыл бұрын
If I name the folder as modules instead of cogs, when I have to make the load command I should do f’modules.{extension}’ right?
@andrewkachnic7973
@andrewkachnic7973 5 жыл бұрын
yes
@TigerManGaming
@TigerManGaming 5 жыл бұрын
My commands work fine but the console still returns an CommandNotFound error..
@feeshx
@feeshx 4 жыл бұрын
how do i make a folder with pycharm?
@vaiterius
@vaiterius 3 жыл бұрын
Thank you sir!
@tsuyoiakio
@tsuyoiakio 3 жыл бұрын
Could you show us how to limit the kick and ban commands to the server owner and/or bot owner?
@boxlid214
@boxlid214 3 жыл бұрын
In the main bot file, create a folder named 'utils'. Create a python document named 'checks' and add 'import discord' at the top. Now just write something like this to check any sort of permissions for commands: owner = default.get("config.json").owner async def check_permissions(ctx, perms, *, check=all): if ctx.author.id == owner: return True resolved = ctx.channel.permissions_for(ctx.author) return check(getattr(resolved, name, None) == value for name, value in perms.items()) def has_permissions(*, check=all, **perms): async def pred(ctx): return await check_permissions(ctx, perms, check=check) return commands.check(pred) At the top of the cogs, load your checks like this: from utils import checks Now at the top of your commands inside said cogs, you just add two lines like this, just changing the permission requirement to what you want it to require, for example 'kick_members' in place of 'administrator': @commands.guild_only() @checks.has_permissions(administrator=True) Your JSON config file will be different, but you just load it up and grab your bot owner ID from it as shown
@skyhealth6625
@skyhealth6625 4 жыл бұрын
can anyone help me with VSC, name 'client' is not defined
@Xythdonkey
@Xythdonkey 3 жыл бұрын
Tried unloading the ping extension and got this error "ExtensionNotFound: Extension 'cogs.information' could not be loaded."
@doman991
@doman991 3 жыл бұрын
same (comment for notification)
@dinokrivic5486
@dinokrivic5486 3 жыл бұрын
Ofc, cause ping is not an extension it's a command...
@saltpanda6488
@saltpanda6488 3 жыл бұрын
you might want to check the path of your cogs folder. Perhaps the directory is \ instead of /
@Greg2
@Greg2 3 жыл бұрын
The import discord from the cogs command is imported but unused.
@scaprod558
@scaprod558 3 жыл бұрын
"TypeError: Cogs.listener expected str but received 'function' instead" How do I fix this?
@RS-wq1qs
@RS-wq1qs 3 жыл бұрын
@commands.Cog.listener() use this maybe it will be fixed
@remycedelle6597
@remycedelle6597 3 жыл бұрын
Hello, an error was thrown at me when I tried to run the program. Can someone please assist me?
@TheN3on
@TheN3on 2 жыл бұрын
Hey! i have this error when running: discord.ext.commands.errors.ExtensionFailed: Extension 'cogs.ping' raised an error: NameError: name 'client' is not defined what should i do?
@iBlitz10000
@iBlitz10000 5 жыл бұрын
Hey Lucas, can you do a video on how to make custom help messages and on how to use the permissions system that I think is already implemented?
@iamnew4887
@iamnew4887 5 жыл бұрын
to make the help message custom you first have to get rid of the original default one. client.remove_command('help') that gets rid of the default one.
@proplayer4756
@proplayer4756 5 жыл бұрын
hi P$
@Mohas191
@Mohas191 4 жыл бұрын
hi PH
@Madbrad2000
@Madbrad2000 3 жыл бұрын
I went into this video confused about cogs, and left the video with a full understanding of them. Mission achieved!
@__oliver__
@__oliver__ 3 жыл бұрын
19:19 ... HOLY F***CKING SH***T THIS IS F***CKING AMAZING THANK YOU SO F***CKING MUCH
@jesselibra1960
@jesselibra1960 3 жыл бұрын
when i try to run the example.py file, it prints nothing and just says "process finished with exit code 0". i double checked the code that i wrote. what did i do wrong?
@themilkiestway
@themilkiestway 3 жыл бұрын
can you post your code
@myth5002
@myth5002 3 жыл бұрын
hey i have a question *Whats wrong with loading **cogs.Example.py** instead of cogs.Example?*
@ToothlessLL
@ToothlessLL 3 жыл бұрын
In the client.load_extension(f'cogs.{extension}') on line 9, how does the bot know where to look for the cog? The path is not specified anywhere in the load/unload/reload functions.
@jamesmcintyre5553
@jamesmcintyre5553 3 жыл бұрын
client.load_extension(f'cogs.{extension}). cog.{extension}. in this context cogs is the directory
@standingpad
@standingpad 3 жыл бұрын
It looks for it in the bot folder. Because the cogs are in a cog folder and that cog folder is a subdirectory of the bot folder, it'll find it like normal. Files in the cog folder can also access files in the bot folder(as far as I can tell)
@laurentiulaslau1840
@laurentiulaslau1840 3 жыл бұрын
Nice video dude! I'm surprised you didn't said "Co*ks" at least once...
@bluemushroom415
@bluemushroom415 5 жыл бұрын
A game bot! Like the pokemon bot!
@extremeptgaming6193
@extremeptgaming6193 4 жыл бұрын
The "reload" one doesn't work tho?
@mydadlovesme7811
@mydadlovesme7811 3 жыл бұрын
could you possibly make a tutorial on how to have the bot join and leave a voice channel?
@John-li2qi
@John-li2qi 2 жыл бұрын
So beyond just organizing certain types of commands into categories(separate files) the other main benefit is you can update code, without having to completely disconnect and reconnect the bot? Instead, you'd just relaod the file with the code change.
@luis2evil976
@luis2evil976 2 жыл бұрын
for me it only runs 1 cog and only 1 command of the cog any fix?
@vicesimum_phi8123
@vicesimum_phi8123 4 жыл бұрын
I had some issues as I kept the ping function from bot.py all the way to this video, so when you name the function ping in the cog, it gives an error. I fixed that with an alias.
@HorrifyingMonkey
@HorrifyingMonkey 4 жыл бұрын
How did you do this? im having a similar error with the 'client' variable as its not in external files
@inodecode7600
@inodecode7600 4 жыл бұрын
​@@HorrifyingMonkey I had to comment out the ping function in Cog file, now my bot is working, but I guess i wont use that ping function within the cog? lol Im in the same boat you are.
@inodecode7600
@inodecode7600 4 жыл бұрын
I would like to know how he set the alias
@HorrifyingMonkey
@HorrifyingMonkey 4 жыл бұрын
@@inodecode7600 i managed to fix it, instead of client.latency, use 'self.client.latency' in the cogs
@decadescence9883
@decadescence9883 4 жыл бұрын
@@HorrifyingMonkey Saved me a headache, cheers mate
@s.v.versorium1337
@s.v.versorium1337 3 жыл бұрын
Found the solution for VSS on accident, still don't know how but here it goes. as follow ./*map where bot.py is in*/cogs So I've a main map with the name "Maincode", command is as follow for filename in os.listdir('./Maincode/cogs'): if filename.endswith('.py'): client.load_extension(f'cogs.{filename[:-3]}') Can someone explain to me what the difference is, because now in Python shell the code doesn't work.
@AyushGaming185
@AyushGaming185 2 жыл бұрын
actualy i cant use some commands in cogs like kick ban it gives an error
@tanishqagarwal5496
@tanishqagarwal5496 3 жыл бұрын
Thanks a lot! Now my code is clean...
@csicee
@csicee 3 жыл бұрын
How do I make it so only certain roles can do them and in certain channels, please?
@PapaCornwell
@PapaCornwell 3 жыл бұрын
Permissions for the certain channels
@ParasiteDelta
@ParasiteDelta 4 жыл бұрын
While it's been over five months, can you explain the benefits of using a Cog loader compared to just directly importing the files? Instead of all the tricky syntax and required file prep, why not just load them in as modules and reload? Granted, maybe Cogs don't require a reload and can be loaded in at any time, but that's about all that I could think of in terms of benefit.
@delta-176
@delta-176 4 жыл бұрын
ikr
@aplinplays3814
@aplinplays3814 3 жыл бұрын
does anyone know how to run the program in atom?
@extracub1974
@extracub1974 3 жыл бұрын
I assume this can also quarantine certain code in case it were to break
@yoink7324
@yoink7324 3 жыл бұрын
my ping command does not work in the example folder, i typed @commands.command() async def ping(self, ctx): await ctx.send(f’{round(client.latency * 1000)}ms’) and i get tthe error: command raised an exception: cannot convert float NaN to integer. EDIT: i solved it. for anyone else having this issue, you need to put “self” before the client.latency so it should be (f’{round(self.client.latency * 1000)}ms’)
@ashflake5318
@ashflake5318 2 жыл бұрын
thanks :)))
@epicgamer-sw9ch
@epicgamer-sw9ch 4 жыл бұрын
keep getting filename is not defined (edit nvm i kept putting file not filename lol
@90e88
@90e88 4 жыл бұрын
I get an error discord.ext.commands.errors.ExtensionNotFound: Extension 'cogs.test' could not be loaded. how to fix?
@didierpolgar8651
@didierpolgar8651 3 жыл бұрын
you need to capitalize "Cog" when you are setting it up
@real.xplo1t
@real.xplo1t 3 жыл бұрын
hi, i fixed it by apparently saving the example.py file. It was kinda dumb on my side but yeah, that fixed it for me :)
Python: Making a Discord bot (Part 8: Bot Status)
4:35
Lucas
Рет қаралды 137 М.
Making a Discord Bot in Python (Part 3: Commands)
19:36
Lucas
Рет қаралды 37 М.
EVOLUTION OF ICE CREAM 😱 #shorts
00:11
Savage Vlogs
Рет қаралды 8 МЛН
ВОДА В СОЛО
00:20
⚡️КАН АНДРЕЙ⚡️
Рет қаралды 30 МЛН
НРАВИТСЯ ЭТОТ ФОРМАТ??
00:37
МЯТНАЯ ФАНТА
Рет қаралды 7 МЛН
Python Discord Bot - How to use Cogs [discord.py]
21:53
Anson the Developer
Рет қаралды 23 М.
Python: Making a Discord bot (Part 10: Errors)
11:42
Lucas
Рет қаралды 90 М.
Discord.py: Making a Discord bot (Part 16: Cogs)
17:57
Lucas
Рет қаралды 35 М.
Python: Making a Discord bot (Part 12: Server Prefixes)
20:49
How to write a Discord Role Reaction Bot in Python w/ Discord.py
17:16
Anson the Developer
Рет қаралды 59 М.
Making a Discord Bot in Python (Part 1: Setup)
11:01
Lucas
Рет қаралды 94 М.
Python: Making a Discord bot (Part 9: Background Task)
7:12