koishi-plugin-kbot
Version:
A muti-function qq bot for koishi
127 lines (126 loc) • 5.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTwitterTweets = exports.getTwitterRestId = void 0;
const enum_1 = require("../enum");
async function getTwitterRestId(twitterId, http, logger) {
const param = {
variables: {
screen_name: twitterId,
withSafetyModeUserFields: true,
// withSuperFollowsUserFields: true,
},
features: {
creator_subscriptions_tweet_preview_api_enabled: true,
hidden_profile_likes_enabled: false,
highlights_tweets_tab_ui_enabled: true,
// responsive_web_twitter_blue_verified_badge_is_enabled: true,
responsive_web_graphql_exclude_directive_enabled: true,
responsive_web_graphql_skip_user_profile_image_extensions_enabled: false,
responsive_web_graphql_timeline_navigation_enabled: true,
subscriptions_verification_info_verified_since_enabled: true,
verified_phone_label_enabled: false,
},
};
// FIXME
const data = await http
.get(`${enum_1.TwitterDynamicType.UserByScreenNameURL}?variables=${encodeURIComponent(JSON.stringify(param.variables))}&features=${encodeURIComponent(JSON.stringify(param.features))}`, {
// params: {
// variables: encodeURIComponent(JSON.stringify(param.variables)),
// features: encodeURIComponent(JSON.stringify(param.features)),
// },
})
.then((res) => {
return [res?.data?.user?.result?.rest_id, res?.data?.user?.result?.legacy?.name];
})
.catch((err) => {
if (['ECONNRESET', 'ETIMEDOUT', 'ECONNREFUSED', 'ECONNABORTED'].includes(err.code))
throw new Error('请求超时, 网络错误');
logger.error(`error getTwitterRestId: ${err}`);
return [];
});
return data;
}
exports.getTwitterRestId = getTwitterRestId;
async function getTwitterTweets(restId, ctx, logger, isPure = false, isListen = false) {
const param = {
variables: {
userId: restId,
count: 20,
includePromotedContent: true,
withQuickPromoteEligibilityTweetFields: true,
// withSuperFollowsUserFields: true,
// withDownvotePerspective: false,
// withReactionsMetadata: false,
// withReactionsPerspective: false,
// withSuperFollowsTweetFields: true,
withVoice: true,
withV2Timeline: true,
},
features: {
creator_subscriptions_tweet_preview_api_enabled: true,
freedom_of_speech_not_reach_fetch_enabled: true,
graphql_is_translatable_rweb_tweet_is_translatable_enabled: true,
// interactive_text_enabled: true,
longform_notetweets_consumption_enabled: true,
// longform_notetweets_richtext_consumption_enabled: false,
longform_notetweets_rich_text_read_enabled: true,
longform_notetweets_inline_media_enabled: true,
responsive_web_edit_tweet_api_enabled: true,
responsive_web_enhance_cards_enabled: false,
responsive_web_graphql_exclude_directive_enabled: true,
responsive_web_graphql_skip_user_profile_image_extensions_enabled: false,
responsive_web_graphql_timeline_navigation_enabled: true,
responsive_web_media_download_video_enabled: false,
// responsive_web_text_conversations_enabled: false,
responsive_web_twitter_article_tweet_consumption_enabled: false,
// responsive_web_twitter_blue_verified_badge_is_enabled: true,
rweb_lists_timeline_redesign_enabled: true,
standardized_nudges_misinfo: true,
tweet_awards_web_tipping_enabled: false,
tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: true,
tweetypie_unmention_optimization_enabled: true,
verified_phone_label_enabled: false,
// vibe_api_enabled: true,
view_counts_everywhere_api_enabled: true,
},
fieldToggles: {
withArticleRichContentState: false,
},
};
let tokenError = false;
const res = await ctx.http
.get(`${enum_1.TwitterDynamicType.UserTweetsURL}?variables=${encodeURIComponent(JSON.stringify(param.variables))}&features=${encodeURIComponent(JSON.stringify(param.features))}?fieldToggles=${encodeURIComponent(JSON.stringify(param.fieldToggles))}`)
.then((res) => {
return res;
})
.catch((err) => {
if (err?.response?.status === 403) {
tokenError = true;
return err;
}
if (['ECONNRESET', 'ETIMEDOUT', 'ECONNREFUSED', 'ECONNABORTED'].includes(err.code)) {
if (isListen)
return 'continue';
else
throw new Error('请求超时, 网络错误');
}
throw new Error(`${err?.response?.data?.errors?.[0]?.message || 'cookie异常 请重新设置'}`);
});
if (tokenError)
throw new Error('token 失效, 请使用 --ck 重新设置');
if (res === 'continue')
return [];
if (!res)
throw new Error('动态获取失败,请稍后再试');
const instructions = res?.data.user?.result?.timeline_v2?.timeline?.instructions || [];
const entries = instructions.find(entry => entry.type === 'TimelineAddEntries')?.entries || [];
if (isPure) {
const pureEntries = entries.find(entry => !entry?.content?.itemContent?.tweet_results?.result?.quoted_status_result
?.result
&& !entry?.content?.itemContent?.tweet_results?.result?.legacy
?.retweeted_status_result?.result);
return [pureEntries];
}
return entries;
}
exports.getTwitterTweets = getTwitterTweets;