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

Поделиться
HTML-код
  • Опубликовано: 25 июн 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

Комментарии • 37

  • @Pie_Master.
    @Pie_Master. 3 месяца назад +3

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

    • @pixegami
      @pixegami  3 месяца назад

      Glad to hear it. Thanks!

  • @mozphat9308
    @mozphat9308 5 месяцев назад +1

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

    • @pixegami
      @pixegami  4 месяца назад +1

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

  • @sesameydmclips
    @sesameydmclips 4 месяца назад +1

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

    • @pixegami
      @pixegami  4 месяца назад

      Awesome! Glad to hear it :)

  • @BrunoAtLoka
    @BrunoAtLoka 5 месяцев назад +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  4 месяца назад

      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.

  • @menisadi
    @menisadi 5 месяцев назад +1

    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  4 месяца назад +1

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

  • @4cat.1dog
    @4cat.1dog 9 месяцев назад +2

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

    • @pixegami
      @pixegami  9 месяцев назад

      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: ruclips.net/video/wbsbXfkv47A/видео.html

  • @Sn4red
    @Sn4red 2 месяца назад +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  2 месяца назад

      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 9 месяцев назад +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  9 месяцев назад +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 9 месяцев назад

      @@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 8 месяцев назад +1

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

    • @codingwithpar
      @codingwithpar 8 месяцев назад

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

  • @gamersgame43
    @gamersgame43 Месяц назад

    Hi just asking is this method better hosting than EC2 method

  • @saphirsatillo2357
    @saphirsatillo2357 8 месяцев назад +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  8 месяцев назад

      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`).

  • @volodymyrtruba7016
    @volodymyrtruba7016 2 месяца назад +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 2 месяца назад

      Second this! Running into this issue as well :)

    • @SiebeTolsma-wy1pd
      @SiebeTolsma-wy1pd 2 месяца назад

      Did you figure it out already?

    • @volodymyrtruba7016
      @volodymyrtruba7016 2 месяца назад

      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  2 месяца назад

      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 8 месяцев назад +2

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

    • @Beltramstein
      @Beltramstein 5 месяцев назад +1

      Yeah me too. He could answer..

    • @Beltramstein
      @Beltramstein 5 месяцев назад

      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 5 месяцев назад +1

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

  • @bigbadbroadcast
    @bigbadbroadcast 5 месяцев назад +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  4 месяца назад

      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 8 месяцев назад

    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  7 месяцев назад

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

    • @sesameydmclips
      @sesameydmclips 4 месяца назад

      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.