- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个私有(private)浏览器扩展程序,它从网页中提取一些信息并通过 webhook 将其发布到 Discord channel 。
浏览器扩展确实评估 x-ratelimit-...
响应 header 以遵守速率限制限制。
在进行“垃圾邮件测试”时,似乎正确遵守了速率限制限制,并且到目前为止一切正常。但是,即使 ratelimit-remaining
在发送一堆消息 (15+) 后,我仍然会时不时地受到速率限制。是 > 0
.
为了解决这个问题,我已经停止了 ratelimit-remaining
是 1
并在 ratelimit-reset
上增加一秒时间戳。但这似乎没有帮助。
let rateLimitRemaining = 5;
let rateLimitReset = 0;
function sendContent()
{
if ( contentQueue.length > 0 )
{
console.log( "Messages in content queue: " + contentQueue.length );
let content = contentQueue[ 0 ];
let dateTimestamp = getCurrentUTCTimestamp();
// Don't send if remaining rate limit is <= 1 and current UTC time is less than reset timestamp
if ( rateLimitRemaining <= 1 && dateTimestamp <= rateLimitReset )
return;
contentQueue.shift();
let url = "...";
sendMessage( content, url );
}
}
function sendMessage( content, url )
{
let payload = JSON.stringify( { "content": content } );
$.ajax(
{
contentType: 'application/json',
method: "POST",
url: url,
data: payload,
dataType: 'json'
} ).done( function( response, status, jqXHR )
{
rateLimitRemaining = parseInt( jqXHR.getResponseHeader( 'x-ratelimit-remaining' ) );
// Add an additional second to the reset timestamp
rateLimitReset = parseInt( jqXHR.getResponseHeader( 'x-ratelimit-reset' ) ) + 1;
let timeToResetRemaining = rateLimitReset - getCurrentUTCTimestamp();
console.log( '[' + getCurrentDateTime() + '] Content sent to webhook. Remaining until rate limit: ' + rateLimitRemaining + ' / Reset @ ' + rateLimitReset + ' (' + getCurrentUTCTimestamp() + ') (' + timeToResetRemaining + ')' );
} ).fail( function( jqXHR, status, error )
{
let response = jqXHR.responseJSON;
// If we got rate limited, respect the retry_after delay
if ( response.hasOwnProperty( 'message' ) && response.message.indexOf( 'rate limited' ) !== 0 )
{
rateLimitRemaining = 0;
rateLimitReset = getCurrentUTCTimestamp() + Math.ceil( response.retry_after / 1000 ) + 1;
}
console.log( '[' + getCurrentDateTime() + '] Error sending request to webhook.' );
console.log( response );
} );
}
x-ratelimit-remaining
> 0 处的响应 header 。
x-ratelimit-bucket
和
x-ratelimit-reset-after
也考虑?
最佳答案
根据不和谐的开发人员文档, header 中的速率限制不为零似乎很奇怪。不确定您的应用程序中是否是这种情况,但它确实提到“用于控制表情符号的路线不遵循正常的速率限制约定。这些路线在每个公会的基础上受到特别限制,以防止滥用。这意味着我们返回的配额API 可能不准确,您可能会遇到 429。”。
开发人员文档声明您应该依靠 Retry-After header 或 retry-after 字段来确定重试时间,因此最好这样做而不是其他 header 。无论剩余 header 是否可用,API 速率限制的更好模式是将所有查询添加到队列中,成功时将其从队列中删除,失败时状态为 429,为队列设置超时基于 Retry-After header 。这将确保您的请求继续得到处理。您绝对可以在浏览器端的 javascript 中执行此操作,但是我将把它作为练习留给读者,因为它可能不是最好的方法(见下文)。
如果您打算让其他人使用此代码或发布它,那么您将不希望直接从浏览器调用 API,因为它会提供对您的 webhook 凭据的访问权限。相反,让您的浏览器针对服务器进行身份验证,然后隐藏您的 webhook 凭据。然后,如果您要在服务器上使用 node.js,我建议您使用 discord.js SDK,它会自动处理速率限制。
关于javascript - Discord webhook 速率限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59117210/
我需要一次发送至少 200 条消息。程序启动后,给15或17发邮件成功,然后报错: 消息错误: com.sun.mail.smtp.SMTPSendFailedException: 421 4.4.2
我目前正在开发一个使用 AVSynthesizer 将文本转换为语音的 iOS 应用程序。 我想要做的是,当合成器在说话时,可以通过 slider 改变发声率,并且说话的速度会发生变化。 我在 sli
假设我们有以下场景: 包含 10,000 条消息的服务总线队列 Azure Functions(使用计划),其中函数设置为 SB 队列的触发器 外部(不受我们控制)系统无法超过特定请求率 如果我尽快对
TextToSpeech有设置语速的方法:setSpeechRate() .但它没有查询当前速度的相反方法。 有没有办法向系统查询该值? 最佳答案 您可能会得到默认的 TTS 语速 Settings.
我有一个关于 NGINX 速率限制的问题。 是否可以根据 JWT token 的解码值进行速率限制?我在文档中找不到任何这样的信息。 或者即使有一种通过创建纯自定义变量(使用 LuaJIT)来进行速率
我有一个带有方向键和 2 个按钮的游戏 handle 。所有这些都是数字的(不是模拟的)。 我有一个处理他们的事件的程序: -(void)gamepadTick:(float)delta {
所以我需要在 OpenCV 中获取网络摄像头的 fps 速率。哪个功能可以做这样的事情? 最佳答案 int cvGetCaptureProperty( CvCapture* capture, int
我四处寻找 CURL 设置文件,但没有在/etc/中找到它,也没有在 curl 站点 ether 上找到太多... 所以基本上我想做的是设置 curl 可以上传的最大速度限制(无论它正在运行多少个实例
我有一个在 Atom 上运行的嵌入式 Linux 系统,这是一个足够新的 CPU,可以有一个不变的 TSC(时间戳计数器),内核在启动时测量其频率。我在自己的代码中使用 TSC 来保持时间(避免内核调
我正在寻找一种以高粒度单独限制 RPC 速率的方法,令我沮丧的是,针对此问题可用的选项并不多。我正在尝试用 gRPC 替换 REST API,对我来说最重要的功能之一是能够为每个路由添加中间件。不幸的
我正在使用 PHP、MySQL 和 Redis 开发 API,并希望对特定调用进行速率限制。 API 位于 CloudFlare 后面。为实现这一点,我将增加每个 IP 地址每小时在 Redis 中进
我正在寻找一种以编程方式(无论是调用库还是独立程序)监视 linux 中实时 ip 流量的方法。我不想要总数,我想要当前正在使用的带宽。我正在寻找与 OS X 的 istat 菜单的网络流量监视器类似
所以我注意到 Apple 更改了 SKStoreProductViewController,禁用了“写评论”按钮。此问题是否有任何解决方法或修复方法? 最佳答案 SKStoreProductViewC
我今天浏览了 Amazon RDS 定价网站,现在确实想知道他们实际上如何计算 I/O 速率? “每 100 万个请求 0.10 美元”到底是什么意思? 谁能举出一些简单的例子,从 EC2 到 RDS
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 5 年前。 Improve
在旧的 API 中,剩余的允许容量显然作为 X-Ratelimit-Remaining 返回HTTP header 。 然而,current version's documentation对此一无所获
在我的 Android 应用程序中,我观察到前置摄像头录制的视频以 7-10 fps 的速度录制,而后置摄像头的工作正常, native 摄像头应用程序确实以 29fps 的速度录制前置摄像头的视频。
我正在编码一个里面有 dvb_teletext 的视频。打开输出流 #1:2 的编码器时出现错误提示。我使用以下命令对我的视频进行编码。 ffmpeg -threads 8 -i input.ts -
我正在使用以下命令为我的视频添加淡入淡出效果 {"-y", "-ss", "" + startMs / 1000, "-t", "" + (endMs - startMs) / 1000, "-i",
我正在尝试使用以下命令通过 FFMPEG 将 avi 视频文件转换为 flv 格式: -i C:\files\input\test.avi -y -ab 448k -ar 48000 -vcodec
我是一名优秀的程序员,十分优秀!