我正在为 discord 设计一个 Twitter 集成,并通过调用搜索最近的推文遇到了速率限制问题。我正在研究流媒体但无法弄清楚如何流式传输多个用户(在命令中添加)。我目前正在使用这段代码,它对一个用户非常有用,但鉴于每个流的规则都存在,我看不出有一种方法可以轻松地运行单独的实例:
const { ETwitterStreamEvent, TweetStream, TwitterApi, ETwitterApiError } = require('twitter-api-v2');
const client = new TwitterApi(process.env["BEARER_TOKEN"]);
async function startStream(userName){
const stream = await client.v2.searchStream();
await client.v2.updateStreamRules({
add: [
{ value: `from:${userName}`, tag: userName },
],
});
stream.on(
ETwitterStreamEvent.ConnectionError,
err => console.log('Connection error!', err),
);
stream.on(
ETwitterStreamEvent.ConnectionClosed,
() => console.log('Connection has been closed.'),
);
stream.on(
ETwitterStreamEvent.Data,
eventData => console.log(eventData),
);
stream.autoReconnect = true;
}
有没有办法同时为不同的用户运行多个流?
对于下一个,这里是一个小例子,对我来说很实用。 在“TwitterClient.js”文件中:
const { TwitterApi } = require('twitter-api-v2');
const client = new TwitterApi({
appKey: process.env.TWITTER_KEY,
appSecret: process.env.TWITTER_SECRET,
accessToken: process.env.TWITTER_TOKEN_KEY,
accessSecret: process.env.TWITTER_TOKEN_SECRET,
});
const bearer = new TwitterApi(process.env.TWITTER_BEARER_TOKEN);
const twitterClient = client.readWrite;
const twitterBearer = bearer.readOnly;
module.exports = { twitterClient, twitterBearer };
启动机器人时,例如在 index.js 或 ready.js 中:
const { ETwitterStreamEvent } = require('twitter-api-v2');
const userName = "<username>";
await client.twitterBearer.v2.updateStreamRules({
add: [
{ value: `from:${userName}`, tag: userName },
],
});
const stream = await client.twitterBearer.v2.searchStream();
stream.on(
ETwitterStreamEvent.Data,
eventData => interactionTwitter.execute(eventData),
);
stream.autoReconnect = true;
添加:[ { 值:
from:${userName}
,标签:用户名},
{ 值:from:${userName2}
,标签:userName2 }
]});