在我尝试用Render托管我的机器人时,遇到了429请求过多的错误
我做了一个Discord机器人,基本上就是一个超简单的蜜罐,用来让机器人被我服务器封禁。然而,当我尝试在Render上托管我的机器人时,出现了这个错误:
discord.errors.HTTPException: 429 Too Many Requests (error code: 0): <!doctype html>
奇怪的部分是,当我在本地电脑上运行这段代码时并不会出现这个错误,只有在我尝试在Render上托管它时才会出现。此外,出于某种原因,我在Render上无法查看discord.log文件,因此我对如何调试一无所知。
Here is the code for the bot:
import discord
from discord.ext import commands
import logging
from dotenv import load_dotenv
import os
import random
from keep_alive import keep_alive
# bot setup
load_dotenv()
token = os.getenv("DISCORD_TOKEN")
keep_alive()
handler = logging.FileHandler(filename="discord.log", encoding="utf-8", mode="w")
intents = discord.Intents.default()
intents.message_content = True
intents.members = True
bot = commands.Bot(command_prefix="!", intents=intents)
# constants
MOD_ROLES = ["Mod"]
BOT_TRAP_CHANNEL = 1472514187757355131
BANNED_BOTS_CHANNEL = 1472840649433944145
BOT_ROLE = "I am a robot"
BAN_REASON = "you are a bot and bots are cringe"
BAN_MESSAGES = [
"{m} thought they were a robot",
"{m} selected the \"I am a robot\" role (not a good idea)",
"{m} was NOT cooking. (you CAN believe it)",
"{m} is a bot. Have fun being banned!",
"{m} can't read... or they were a bot.",
"Everyone please laugh at {m}.",
"What is {m} doing? (being a bot and probably scamming people or smth)",
"{m} died",
"{b} is better that {m}.",
"{b} is the only bot here that we like. The same can not be said about {m}",
"{m}.ban(reason=\"you are a bot and bots are cringe\")",
"{m} get banned noob",
"{m} was NOT a human.",
"{m} is a filthy clanker",
"A wild {m} turned out to actually be a bot!"
]
# ban member function
async def banMember(member: discord.Member):
await member.ban(reason=BAN_REASON)
await bot.get_channel(BANNED_BOTS_CHANNEL).send(random.choice(BAN_MESSAGES).format(m=member.mention, b=bot.user.mention))
# ban bots in bot-trap channel
def MemberIsMod(member: discord.Member):
for role in member.roles:
if role.name in MOD_ROLES:
return True
return False
@bot.event
async def on_message(message: discord.Message):
if message.author == bot.user:
return
if message.channel == bot.get_channel(BOT_TRAP_CHANNEL):
if not MemberIsMod(message.author):
await banMember(message.author)
await bot.process_commands(message)
# ban bots with "I AM A BOT PLEASE BAN ME" role
def MemberHasBotRole(member: discord.Member):
for role in member.roles:
if role.name == BOT_ROLE:
return True
return False
@bot.event
async def on_member_update(before: discord.Member, after: discord.Member):
if len(before.roles) < len(after.roles):
if MemberHasBotRole(after):
await banMember(after)
@bot.event
async def on_ready():
for member in bot.get_all_members():
if MemberHasBotRole(member):
await banMember(member)
bot.run(token, log_handler=handler, log_level=logging.DEBUG)
Here is the log from render:
2026-03-03T06:15:58.43508941Z 127.0.0.1 - - [03/Mar/2026 06:15:58] "HEAD / HTTP/1.1" 200 -
2026-03-03T06:21:03.5180319Z 127.0.0.1 - - [03/Mar/2026 06:21:03] "HEAD / HTTP/1.1" 200 -
2026-03-03T06:26:07.415685655Z 127.0.0.1 - - [03/Mar/2026 06:26:07] "HEAD / HTTP/1.1" 200 -
2026-03-03T06:31:11.314376365Z 127.0.0.1 - - [03/Mar/2026 06:31:11] "HEAD / HTTP/1.1" 200 -
2026-03-03T06:36:16.728865579Z 127.0.0.1 - - [03/Mar/2026 06:36:16] "HEAD / HTTP/1.1" 200 -
2026-03-03T06:41:21.370584379Z 127.0.0.1 - - [03/Mar/2026 06:41:21] "HEAD / HTTP/1.1" 200 -
2026-03-03T06:46:30.710635137Z 127.0.0.1 - - [03/Mar/2026 06:46:30] "HEAD / HTTP/1.1" 200 -
2026-03-03T06:51:37.702580677Z 127.0.0.1 - - [03/Mar/2026 06:51:37] "HEAD / HTTP/1.1" 200 -
2026-03-03T06:56:43.136182407Z 127.0.0.1 - - [03/Mar/2026 06:56:43] "HEAD / HTTP/1.1" 200 -
2026-03-03T07:01:48.387383028Z 127.0.0.1 - - [03/Mar/2026 07:01:48] "HEAD / HTTP/1.1" 200 -
2026-03-03T07:05:10.209759642Z ==> Deploying...
2026-03-03T07:05:10.315228536Z ==> Setting WEB_CONCURRENCY=1 by default, based on available CPUs in the instance
2026-03-03T07:05:59.176133378Z ==> Running 'python3 main.py'
2026-03-03T07:06:05.513511362Z * Serving Flask app ''
2026-03-03T07:06:05.513959902Z * Debug mode: off
2026-03-03T07:06:05.60569915Z WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
2026-03-03T07:06:05.60572466Z * Running on all addresses (0.0.0.0)
2026-03-03T07:06:05.605729841Z * Running on http://127.0.0.1:8080
2026-03-03T07:06:05.60573427Z * Running on http://10.19.182.181:8080
2026-03-03T07:06:05.605777722Z Press CTRL+C to quit
2026-03-03T07:06:05.706825405Z Traceback (most recent call last):
2026-03-03T07:06:05.708642485Z File "/opt/render/project/src/main.py", line 92, in <module>
2026-03-03T07:06:05.708657386Z bot.run(token, log_handler=handler, log_level=logging.DEBUG)
2026-03-03T07:06:05.708661686Z ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-03-03T07:06:05.708666216Z File "/opt/render/project/src/.venv/lib/python3.14/site-packages/discord/client.py", line 929, in run
2026-03-03T07:06:05.708671216Z asyncio.run(runner())
2026-03-03T07:06:05.708675066Z ~~~~~~~~~~~^^^^^^^^^^
2026-03-03T07:06:05.708679116Z File "/opt/render/project/python/Python-3.14.3/lib/python3.14/asyncio/runners.py", line 204, in run
2026-03-03T07:06:05.708683076Z return runner.run(main)
2026-03-03T07:06:05.708686836Z ~~~~~~~~~~^^^^^^
2026-03-03T07:06:05.708690756Z File "/opt/render/project/python/Python-3.14.3/lib/python3.14/asyncio/runners.py", line 127, in run
2026-03-03T07:06:05.708695966Z return self._loop.run_until_complete(task)
2026-03-03T07:06:05.708699737Z ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
2026-03-03T07:06:05.708704417Z File "/opt/render/project/python/Python-3.14.3/lib/python3.14/asyncio/base_events.py", line 719, in run_until_complete
2026-03-03T07:06:05.708708157Z return future.result()
2026-03-03T07:06:05.708712257Z ~~~~~~~~~~~~~^^
2026-03-03T07:06:05.708716137Z File "/opt/render/project/src/.venv/lib/python3.14/site-packages/discord/client.py", line 918, in runner
2026-03-03T07:06:05.708720127Z await self.start(token, reconnect=reconnect)
2026-03-03T07:06:05.708724847Z File "/opt/render/project/src/.venv/lib/python3.14/site-packages/discord/client.py", line 846, in start
2026-03-03T07:06:05.708729187Z await self.login(token)
2026-03-03T07:06:05.708733277Z File "/opt/render/project/src/.venv/lib/python3.14/site-packages/discord/client.py", line 675, in login
2026-03-03T07:06:05.708737318Z data = await self.http.static_login(token)
2026-03-03T07:06:05.708741127Z ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-03-03T07:06:05.708745198Z File "/opt/render/project/src/.venv/lib/python3.14/site-packages/discord/http.py", line 839, in static_login
2026-03-03T07:06:05.708748988Z data = await self.request(Route('GET', '/users/@me'))
2026-03-03T07:06:05.708752868Z ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-03-03T07:06:05.708756778Z File "/opt/render/project/src/.venv/lib/python3.14/site-packages/discord/http.py", line 709, in request
2026-03-03T07:06:05.708760668Z raise HTTPException(response, data)
2026-03-03T07:06:05.708765448Z discord.errors.HTTPException: 429 Too Many Requests (error code: 0): <!doctype html>
2026-03-03T07:06:05.708769858Z <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]-->
2026-03-03T07:06:05.708773598Z <!--[if IE 7]> <html class="no-js ie7 oldie" lang="en-US"> <![endif]-->
2026-03-03T07:06:05.708780658Z <!--[if IE 8]> <html class="no-js ie8 oldie" lang="en-US"> <![endif]-->
2026-03-03T07:06:05.708785019Z <!--[if gt IE 8]><!-->
2026-03-03T07:06:05.708798779Z <html class="no-js" lang="en-US">
2026-03-03T07:06:05.708801539Z <!--<![endif]-->
2026-03-03T07:06:05.708803879Z <head>
2026-03-03T07:06:05.708806109Z <title>Access denied | discord.com used Cloudflare to restrict access | discord.com | Cloudflare</title>
2026-03-03T07:06:05.708808489Z <meta charset="UTF-8" />
2026-03-03T07:06:05.708810719Z <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
2026-03-03T07:06:05.708813159Z <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
2026-03-03T07:06:05.708815309Z <meta name="robots" content="noindex, nofollow" />
2026-03-03T07:06:05.708817489Z <meta name="viewport" content="width=device-width,initial-scale=1" />
2026-03-03T07:06:05.708819979Z <link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/main.css" /> <script>
2026-03-03T07:06:05.708823349Z (function(){if(document.addEventListener&&window.XMLHttpRequest&&JSON&&JSON.stringify){var e=function(a){var c=document.getElementById("error-feedback-survey"),d=document.getElementById("error-feedback-success"),b=new XMLHttpRequest;a={event:"feedback clicked",properties:{errorCode: 1015 },helpful:a,version: 1 };b.open("POST","https://sparrow.cloudflare.com/api/v1/event");b.setRequestHeader("Content-Type","application/json");b.setRequestHeader("Sparrow-Source-Key","c771f0e4b54944bebf4261d44bd79a1e");
2026-03-03T07:06:05.708827369Z b.send(JSON.stringify(a));c.classList.add("feedback-hidden");d.classList.remove("feedback-hidden")};document.addEventListener("DOMContentLoaded",function(){var a=document.getElementById("error-feedback"),c=document.getElementById("feedback-button-yes"),d=document.getElementById("feedback-button-no");"classList"in a&&(a.classList.remove("feedback-hidden"),c.addEventListener("click",function(){e(!0)}),d.addEventListener("click",function(){e(!1)}))})}})();
2026-03-03T07:06:05.708830069Z </script>
2026-03-03T07:06:05.708832329Z <script
2026-03-03T07:06:05.70883452Z defer
2026-03-03T07:06:05.708837Z src="https://performance.radar.cloudflare.com/beacon.js"
2026-03-03T07:06:05.70883916Z ></script>
2026-03-03T07:06:05.70884133Z </head>
2026-03-03T07:06:05.70884349Z <body>
2026-03-03T07:06:05.70884563Z <div id="cf-wrapper">
2026-03-03T07:06:05.70884786Z <div
2026-03-03T07:06:05.70885021Z class="cf-alert cf-alert-error cf-cookie-error hidden"
2026-03-03T07:06:05.70885244Z id="cookie-alert"
2026-03-03T07:06:05.70885478Z data-translate="enable_cookies"
2026-03-03T07:06:05.70885699Z >
2026-03-03T07:06:05.70885926Z Please enable cookies.
2026-03-03T07:06:05.70886166Z </div>
2026-03-03T07:06:05.70886377Z <div id="cf-error-details" class="p-0">
2026-03-03T07:06:05.70886607Z <header
2026-03-03T07:06:05.708871881Z class="mx-auto pt-10 lg:pt-6 lg:px-8 w-240 lg:w-full mb-15 antialiased"
2026-03-03T07:06:05.70887451Z >
2026-03-03T07:06:05.708876961Z <h1
2026-03-03T07:06:05.70887959Z class="inline-block md:block mr-2 md:mb-2 font-light text-60 md:text-3xl text-black-dark leading-tight"
2026-03-03T07:06:05.708881891Z >
2026-03-03T07:06:05.708884301Z <span data-translate="error">Error</span>
2026-03-03T07:06:05.708886611Z <span>1015</span>
2026-03-03T07:06:05.708888821Z </h1>
2026-03-03T07:06:05.708891021Z <span
2026-03-03T07:06:05.708893341Z class="inline-block md:block heading-ray-id font-mono text-15 lg:text-sm lg:leading-relaxed"
2026-03-03T07:06:05.708901351Z >Ray ID: 9d66cbe959ea150f •</span
2026-03-03T07:06:05.708903821Z >
2026-03-03T07:06:05.708906131Z <span
2026-03-03T07:06:05.708908471Z class="inline-block md:block heading-ray-id font-mono text-15 lg:text-sm lg:leading-relaxed"
2026-03-03T07:06:05.708910711Z >2026-03-03 07:06:05 UTC</span
2026-03-03T07:06:05.708912881Z >
2026-03-03T07:06:05.708915071Z <h2
2026-03-03T07:06:05.708917571Z class="text-gray-600 leading-1.3 text-3xl lg:text-2xl font-light"
2026-03-03T07:06:05.708919911Z >
2026-03-03T07:06:05.708922282Z You are being rate limited
2026-03-03T07:06:05.708924531Z </h2>
2026-03-03T07:06:05.708926802Z </header>
2026-03-03T07:06:05.708928962Z
2026-03-03T07:06:05.708931492Z
2026-03-03T07:06:05.708933832Z <section class="w-240 lg:w-full mx-auto mb-8 lg:px-8">
2026-03-03T07:06:05.708936092Z <div id="what-happened-section" class="w-1/2 md:w-full">
2026-03-03T07:06:05.708938362Z <h2
2026-03-03T07:06:05.708940702Z class="text-3xl leading-tight font-normal mb-4 text-black-dark antialiased"
2026-03-03T07:06:05.708943562Z data-translate="what_happened"
2026-03-03T07:06:05.708945872Z >
2026-03-03T07:06:05.708948142Z What happened?
2026-03-03T07:06:05.708950422Z </h2>
2026-03-03T07:06:05.708952872Z
2026-03-03T07:06:05.708955712Z <p>The owner of this website (discord.com) has banned you temporarily from accessing this website.</p>
2026-03-03T07:06:05.708957902Z
2026-03-03T07:06:05.708960092Z
2026-03-03T07:06:05.708964563Z <p>
2026-03-03T07:06:05.708966872Z Please see
2026-03-03T07:06:05.708969192Z <a
2026-03-03T07:06:05.708971503Z rel="noopener noreferrer"
2026-03-03T07:06:05.708974723Z href="https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-1xxx-errors/error-1015/"
2026-03-03T07:06:05.708976983Z target="_blank"
2026-03-03T07:06:05.708979143Z >https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-1xxx-errors/error-1015/</a
2026-03-03T07:06:05.708981293Z >
2026-03-03T07:06:05.708983463Z for more details.
2026-03-03T07:06:05.708985633Z </p>
2026-03-03T07:06:05.708987963Z
2026-03-03T07:06:05.709017474Z </div>
2026-03-03T07:06:05.709022804Z
2026-03-03T07:06:05.709025394Z
2026-03-03T07:06:05.709027794Z </section>
2026-03-03T07:06:05.709030434Z
2026-03-03T07:06:05.709032574Z
2026-03-03T07:06:05.709037014Z <div class="feedback-hidden py-8 text-center" id="error-feedback">
2026-03-03T07:06:05.709039384Z <div id="error-feedback-survey" class="footer-line-wrapper">
2026-03-03T07:06:05.709041674Z Was this page helpful?
2026-03-03T07:06:05.709044044Z <button
2026-03-03T07:06:05.709046204Z class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded"
2026-03-03T07:06:05.709054125Z id="feedback-button-yes"
2026-03-03T07:06:05.709056734Z type="button"
2026-03-03T07:06:05.709059185Z >
2026-03-03T07:06:05.709061385Z Yes
2026-03-03T07:06:05.709063555Z </button>
2026-03-03T07:06:05.709065715Z <button
2026-03-03T07:06:05.709067835Z class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded"
2026-03-03T07:06:05.709070155Z id="feedback-button-no"
2026-03-03T07:06:05.709072385Z type="button"
2026-03-03T07:06:05.709074625Z >
2026-03-03T07:06:05.709076915Z No
2026-03-03T07:06:05.709079085Z </button>
2026-03-03T07:06:05.709081275Z </div>
2026-03-03T07:06:05.709083755Z <div class="feedback-success feedback-hidden" id="error-feedback-success">
2026-03-03T07:06:05.709086045Z Thank you for your feedback!
2026-03-03T07:06:05.709088305Z </div>
2026-03-03T07:06:05.709091265Z </div> <div class="cf-error-footer cf-wrapper w-240 lg:w-full py-10 sm:py-4 sm:px-8 mx-auto text-center sm:text-left border-solid border-0 border-t border-gray-300">
2026-03-03T07:06:05.709093525Z <p class="text-13">
2026-03-03T07:06:05.709096075Z <span class="cf-footer-item sm:block sm:mb-1">Cloudflare Ray ID: <strong class="font-semibold">9d66cbe959ea150f</strong></span>
2026-03-03T07:06:05.709098355Z <span class="cf-footer-separator sm:hidden">•</span>
2026-03-03T07:06:05.709100726Z <span id="cf-footer-item-ip" class="cf-footer-item hidden sm:block sm:mb-1">
2026-03-03T07:06:05.709103015Z Your IP:
2026-03-03T07:06:05.709105415Z <button type="button" id="cf-footer-ip-reveal" class="cf-footer-ip-reveal-btn">Click to reveal</button>
2026-03-03T07:06:05.709107806Z <span class="hidden" id="cf-footer-ip">74.220.48.250</span>
2026-03-03T07:06:05.709110096Z <span class="cf-footer-separator sm:hidden">•</span>
2026-03-03T07:06:05.709112456Z </span>
2026-03-03T07:06:05.709118386Z <span class="cf-footer-item sm:block sm:mb-1"><span>Performance & security by</span> <a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing" id="brand_link" target="_blank">Cloudflare</a></span>
2026-03-03T07:06:05.709120696Z
2026-03-03T07:06:05.709123016Z </p>
2026-03-03T07:06:05.709125526Z <script>(function(){function d(){var b=a.getElementById("cf-footer-item-ip"),c=a.getElementById("cf-footer-ip-reveal");b&&"classList"in b&&(b.classList.remove("hidden"),c.addEventListener("click",function(){c.classList.add("hidden");a.getElementById("cf-footer-ip").classList.remove("hidden")}))}var a=document;document.addEventListener&&a.addEventListener("DOMContentLoaded",d)})();</script>
2026-03-03T07:06:05.709127836Z </div><!-- /.error-footer -->
2026-03-03T07:06:05.709130016Z </div>
2026-03-03T07:06:05.709132396Z <!-- /#cf-error-details -->
2026-03-03T07:06:05.709134696Z </div>
2026-03-03T07:06:05.709136926Z <!-- /#cf-wrapper -->
2026-03-03T07:06:05.709138946Z
2026-03-03T07:06:05.709141006Z <script>
2026-03-03T07:06:05.709143227Z window._cf_translation = {};
2026-03-03T07:06:05.709147927Z
2026-03-03T07:06:05.709150187Z
2026-03-03T07:06:05.709152357Z </script>
2026-03-03T07:06:05.709154597Z
2026-03-03T07:06:05.709159167Z <script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'9d66cbe959ea150f',t:'MTc3MjUyMTU2NQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>
2026-03-03T07:06:05.709167167Z </html>
2026-03-03T07:06:05.76991699Z 127.0.0.1 - - [03/Mar/2026 07:06:05] "HEAD / HTTP/1.1" 200 -
2026-03-03T07:06:08.753876963Z ==> Your service is live 🎉
2026-03-03T07:06:08.821146576Z ==>
2026-03-03T07:06:08.824142747Z ==> ///////////////////////////////////////////////////////////
2026-03-03T07:06:08.826781528Z ==>
2026-03-03T07:06:08.832224409Z ==>
2026-03-03T07:06:08.834515968Z ==> ///////////////////////////////////////////////////////////
2026-03-03T07:06:08.93309394Z 127.0.0.1 - - [03/Mar/2026 07:06:08] "GET / HTTP/1.1" 200 -
2026-03-03T07:06:53.902454713Z 127.0.0.1 - - [03/Mar/2026 07:06:53] "HEAD / HTTP/1.1" 200 -
2026-03-03T07:11:10.925348034Z ==> Detected service running on port 8080
2026-03-03T07:11:11.002822429Z ==> Docs on specifying a port: https://render.com/docs/web-services#port-binding
2026-03-03T07:11:59.588732057Z 127.0.0.1 - - [03/Mar/2026 07:11:59] "HEAD / HTTP/1.1" 200 -
解决方案
我在你的代码中没有看到任何本质问题,我认为很可能是你所使用的主机在用户之间共享IP地址,而在同一个IP下运行的机器人总数足以让Discord进行限流/速率限制。既然在本地电脑上运行没有问题,这应该是最可能的解释。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。