From d35ed21f484e8822cd33f41182f6c0e9f9999d50 Mon Sep 17 00:00:00 2001 From: Cohee Date: Sun, 9 Jul 2023 23:07:54 +0300 Subject: [PATCH] Download all Poe bots. --- src/poe-client.js | 18 +++- src/poe_graphql/BotSwitcherModalQuery.graphql | 90 +++++++++++++++++++ 2 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 src/poe_graphql/BotSwitcherModalQuery.graphql diff --git a/src/poe-client.js b/src/poe-client.js index c65d76328..4a6f50951 100644 --- a/src/poe-client.js +++ b/src/poe-client.js @@ -428,13 +428,13 @@ class Client { }; this.session.defaults.headers.common = this.headers; [this.next_data, this.channel] = await Promise.all([this.get_next_data(), this.get_channel_data()]); - this.bots = await this.get_bots(); - this.bot_names = this.get_bot_names(); this.gql_headers = { "poe-formkey": this.formkey, "poe-tchannel": this.channel["channel"], ...this.headers, }; + this.bots = await this.get_bots(); + this.bot_names = this.get_bot_names(); if (this.device_id === null) { this.device_id = this.get_device_id(); } @@ -519,6 +519,20 @@ class Client { throw new Error('Invalid token.'); } const botList = viewer.availableBotsConnection.edges.map(x => x.node); + + try { + const botsQuery = await this.send_query('BotSwitcherModalQuery', {}); + botsQuery.data.viewer.availableBotsConnection.edges.forEach(edge => { + const bot = edge.node; + + if (botList.findIndex(x => x.id === bot.id) === -1) { + botList.push(bot); + } + }); + } catch (e) { + console.log(e); + } + const retries = 2; const bots = {}; const promises = []; diff --git a/src/poe_graphql/BotSwitcherModalQuery.graphql b/src/poe_graphql/BotSwitcherModalQuery.graphql new file mode 100644 index 000000000..a651bfddc --- /dev/null +++ b/src/poe_graphql/BotSwitcherModalQuery.graphql @@ -0,0 +1,90 @@ +query BotSwitcherModalQuery { + viewer { + ...BotSwitcherModalInner_viewer + id + } +} + +fragment BotHeader_bot on Bot { + displayName + isLimitedAccess + ...BotImage_bot + ...BotLink_bot + ...IdAnnotation_node + ...botHelpers_useViewerCanAccessPrivateBot + ...botHelpers_useDeletion_bot +} + +fragment BotHeader_viewer on Viewer { + hasActiveSubscription +} + +fragment BotImage_bot on Bot { + displayName + ...botHelpers_useDeletion_bot + ...BotImage_useProfileImage_bot +} + +fragment BotImage_useProfileImage_bot on Bot { + image { + __typename + ... on LocalBotImage { + localName + } + ... on UrlBotImage { + url + } + } + ...botHelpers_useDeletion_bot +} + +fragment BotLink_bot on Bot { + handle +} + +fragment BotNavItem_bot on Bot { + botId + handle + id + ...BotHeader_bot +} + +fragment BotNavItem_viewer on Viewer { + ...BotHeader_viewer +} + +fragment BotSwitcherModalInner_viewer on Viewer { + ...BotNavItem_viewer + availableBotsConnection(first: 11) { + edges { + node { + id + handle + ...BotNavItem_bot + __typename + } + cursor + id + } + pageInfo { + endCursor + hasNextPage + } + id + } +} + +fragment IdAnnotation_node on Node { + __isNode: __typename + id +} + +fragment botHelpers_useDeletion_bot on Bot { + deletionState +} + +fragment botHelpers_useViewerCanAccessPrivateBot on Bot { + isPrivateBot + viewerIsCreator + isSystemBot +}