Host a Python Discord Bot on AWS Lambda (Free and Easy)

Sdílet
Vložit
  • čas přidán 9. 07. 2024
  • Learn how to create and host a Python Discord bot on AWS Lambda.
    In this tutorial, you'll learn how to create a Discord Bot using Discord's Interaction HTTP endpoints - and then host it for FREE on AWS Lambda. This is a super easy, cost-effective, and scalable way to host Discord bots.
    We'll be using Flask and Python for the Discord bot, and AWS CDK to deploy our Lambda infrastructure.
    🛠️ Code: github.com/pixegami/discord-b...
    👉 Links
    🔗 Discord Developer Portal: / discord
    🔗 AWS CDK: docs.aws.amazon.com/cdk/v2/gu...
    🔗 Running Docker on Lambda: • How to Run a Python Do...
    📚 Chapters
    00:00 Introduction
    02:40 Set Up Discord Bot
    04:13 Register Bot Commands
    07:21 Creating Bot Endpoints
    10:38 Token Validation
    13:02 Create Docker Image
    16:04 Deploying with AWS CDK
    21:15 Wrapping Up

Komentáře • 38

  • @Pie_Master.
    @Pie_Master. Před 4 měsíci +3

    I love how much easier it is to understand how to do all of this, thank you!

    • @pixegami
      @pixegami  Před 4 měsíci

      Glad to hear it. Thanks!

  • @sesameydmclips
    @sesameydmclips Před 5 měsíci +1

    Thanks for the tutorial! I wanted to try using Lambda instead of hosting on EC2 this time, and this worked well

    • @pixegami
      @pixegami  Před 4 měsíci

      Awesome! Glad to hear it :)

  • @mozphat9308
    @mozphat9308 Před 5 měsíci +1

    It took me way too many hours to FINALLY get commands to work. The registration part is not obvious. Thank you!

    • @pixegami
      @pixegami  Před 4 měsíci +1

      Yeah, that took me ages too. Glad it was helpful!

  • @menisadi
    @menisadi Před 5 měsíci +2

    Please please make a video about making of a Telegram bot!
    I know that there are guides out there but your videos are just so clear that I think they add value even on topics which where already covered by others

    • @pixegami
      @pixegami  Před 4 měsíci +1

      That's a great idea :) Thanks for the suggestion.

  • @gamersgame43
    @gamersgame43 Před měsícem

    Hi just asking is this method better hosting than EC2 method

  • @4cat.1dog
    @4cat.1dog Před 9 měsíci +2

    Thank you for the good video. If I want to use the selenium library, how can I add a layer?

    • @pixegami
      @pixegami  Před 9 měsíci

      You should be able to pip install selenium into the Docker build container too by putting it into the requirements txt. Or if you just wanna just run the whole thing in a Docker, then check out this video: czcams.com/video/wbsbXfkv47A/video.html

  • @bleakaddict
    @bleakaddict Před 9 dny

    Just wanna know if its a serverless hosting

  • @BrunoAtLoka
    @BrunoAtLoka Před 5 měsíci +1

    This is absolute gold! Really well presented, step by step!! New subscriber 💪 I wonder if you could do an extension of this example where the bot reacts to events that happen on the Discord server like a new user arriving at the server (from an invite link) to do something tricky - check if the email they registered their account on Discord matches the domain that I, the Discord bot owner, will define (it's actually to set a Role for users that belong to my company) 🤔

    • @pixegami
      @pixegami  Před 4 měsíci

      Thank you! In theory I think it should be possible, we would just have to change the event that triggers the Lambda to be the one where new users join (I'm assuming Discord's API makes it available), but I haven't had a chance to take a closer look into it yet.

  • @saphirsatillo2357
    @saphirsatillo2357 Před 9 měsíci +1

    Thanks for the video. I have a question though, how do you unregister a command? I'm getting a 405 error when I try to request delete.

    • @pixegami
      @pixegami  Před 9 měsíci

      I should have put that in the video: discord.com/developers/docs/interactions/application-commands#updating-and-deleting-a-command
      The endpoint is different, and you'll also need the command ID (which you can get several ways). I got the command ID in the Discord UI directly by right-clicking on the command tooltip after I type it in (e.g. `/hello`).

  • @Sn4red
    @Sn4red Před 3 měsíci +1

    Great video! Regarding performance, e.g a decent amount of users using a lot of commands simultaneously, does AWS Lambda take care of that?

    • @pixegami
      @pixegami  Před 3 měsíci

      Yup! That's actually one of the big selling points of Lambda (and serverless). If a new request comes in, but your all Lambda instances are busy, Lambda will start a new instance. You can configure the "max" number of concurrent instances as well (I think by default it is 10).

  • @HashtagTiluda
    @HashtagTiluda Před 10 měsíci +8

    All the videos you publish are real gems. Not sure if you take requests but can you create a video on a full stack app creating with FastAPI/Supabase backend and NextJS frontend which would cover authentication, stripe billing, etc.

    • @pixegami
      @pixegami  Před 10 měsíci +1

      Thank you! I'll add it to my list of ideas which I use as a starting point for videos. Bigger projects usually take a lot longer so I don't know how quickly I will get around to it. Thanks for the suggestion!

    • @HashtagTiluda
      @HashtagTiluda Před 10 měsíci

      @@pixegami It's best you do a modular playlist. That way, if let's say someone is not using Supabase, they can still watch the other videos on the playlist.

    • @codingwithpar
      @codingwithpar Před 8 měsíci +1

      @@pixegami i need your help what did you pick for the setup

    • @codingwithpar
      @codingwithpar Před 8 měsíci

      @@pixegami and what are the commands you use for the AWS lambda

  • @volodymyrtruba7016
    @volodymyrtruba7016 Před 3 měsíci +4

    Fantastic video! However, how do we handle logic that takes more than 3 seconds to execute, considering Discord messages have a 3-second limit?

    • @SiebeTolsma-wy1pd
      @SiebeTolsma-wy1pd Před 3 měsíci

      Second this! Running into this issue as well :)

    • @SiebeTolsma-wy1pd
      @SiebeTolsma-wy1pd Před 2 měsíci

      Did you figure it out already?

    • @volodymyrtruba7016
      @volodymyrtruba7016 Před 2 měsíci

      Hi , I’ve reworked the bot, and deployed it on ec2, I am using discord.pu library, and t2.micro instance( which is free-tier eligible).

    • @pixegami
      @pixegami  Před 2 měsíci

      Hmm, what do you mean the messages have a 3-second time-out? Do you mean Lambda's default time-out? If so, that can be adjusted up to 15 minutes I believe.

  • @parYTG
    @parYTG Před 8 měsíci +2

    I need help with what commands did you use for the command prompt? At 6:38

    • @Beltramstein
      @Beltramstein Před 6 měsíci +1

      Yeah me too. He could answer..

    • @Beltramstein
      @Beltramstein Před 6 měsíci

      A friend of mine helped me, change the line 17 on register_commands.py to:
      for command in commands["commands"]:
      this should work

    • @Beltramstein
      @Beltramstein Před 6 měsíci +1

      I`m on Windows 11 23H2 OS build 22635.2915, with Python 3.12 and VSC 1.85.1

  • @bigbadbroadcast
    @bigbadbroadcast Před 5 měsíci +1

    So I got all the way to the end, with deployment being successful and I got the link. However, when I check to see, my bot its still offline and also there is no function in aws. Does deploying create a function automatically?
    Follow up question, when you created your bot it was listed as online, while when I made mine it is automatically offline. What did you do here to get it online?
    EDIT
    alright I followed the steps again and got it working, but I still don't see the lambda function in AWS, and I don't know how to debug any other way.
    EDIT AGAIN
    Found it in AWS, I was looking at the wrong region, still can't find a console to do debugging, was wondering exactly how I would test this locally

    • @pixegami
      @pixegami  Před 4 měsíci

      Awesome! Glad you answered some of your own questions. In Lambda, you can see the logs in the "Monitoring Tab". It should have a link to the logs for Lambda invocations in the last X (I think 3?) hours. Read more here: docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html
      I haven't looked too deeply into how to test this locally. I guess I'd want unit tests to actually just test the function logic itself, and maybe I'd develop a script to upload it quickly to a copy (e.g. BETA) of the function for integration testing.
      A lot of it will depend on what hooks/endpoint options Discord offers you to test the integrations as well.

  • @Rohitnansen
    @Rohitnansen Před 8 měsíci

    When I attempt to create a bot in discord, it shows as offline instead of online in my server as it is for you. Anyone know the approach to turn it on?

    • @pixegami
      @pixegami  Před 7 měsíci

      Do you see any error or status messages in the logs?

    • @sesameydmclips
      @sesameydmclips Před 5 měsíci

      I found that interesting as well, since Lambda is only called when needed, so mine appears offline too despite no error in the cloudwatch logs.
      In contrast, when I host a bot locally, the bot appears online.