AHGGG / poe-node-api

A reverse engineered Node.js client for Quora's Poe.
MIT License
38 stars 5 forks source link
api chatgpt claude gpt-4 node poe sage

poe-api-node

A reverse engineered Node.js client for Quora's Poe.

Support: Fetch needed info and write to .env file | send messages to different bot | set up proxies | clear/delete/purge messages | get history messages | get bot info | get next data

I'm still working on this, so it's might not stable. If your meet any problems, please create an issue.

Install

npm install poe-node-api

requirement:

  • node >= 18
  • .env: To store needed params like poe-formkey / cookie / buildId / botId.....

Usage

  1. Get cookie from poe.com: F12 / inspect, Application > Cookies > https://poe.com > p-b

  2. Create .env file in your project root path, and add cookie to .env file

    cookie=p-b=xxxxxxxxxxxxxxxxxxxxxxxxxxx
  3. Fetch all needed info

    const client = new PoeClient({logLevel: 'debug'});
    await client.init()
    // If no poe-formkey and buildId in .env file, client will download needed params, next time will not need to fetch these params again until cookie is changed/logout(For now).

How to create a client:

import {PoeClient} from "poe-node-api";

const client = new PoeClient({logLevel: 'debug'});

How to init client

await client.init()

Bot nicknames

botNickName <==> botDisplayName

  • a2 <==> Claude-instant
  • a2_2 <==> Claude+
  • beaver <==> GPT-4
  • capybara <==> Sage
  • nutria <==> Dragonfly
  • chinchilla <==> ChatGPT
  • hutia <==> NeevaAI
  • Your own bot

SendMessage

/**
  * send message to bot
  * @param text user input
  * @param botNickName bot nick name, like capybara(Sage) / a2(Claude-instant) / a2_2(Claude+) etc.
  * @param withChatBreak Add a chat break or not. (Empty context)
  * @param callback When ws on message, will invoke this callback function.
 */
await client.sendMessage(text, botNickName, withChatBreak, (result: string) => {console.log(`${result}`)})

text: string

botNickName: string

withChatBreak: boolean

callback: (result: string) => void

Warning: Too many requests within one minute will result in (free)account being blocked !!!!!

I had sent about 20 messages in one minute, and now it's blocked. Login failed with error message: Something went wrong. Please wait a moment and try again.

So make sure you know what you're doing~

AddChatBreak

const res = await client.addChatBreak(botNickName);

DeleteMessage

const res = await client.deleteMessage(messageIds);

PurgeAllMessage

const res = await client.purgeAllMessage();

Delete all bot messages, equals to click poe.com > Settings > Delete all messages

GetHistory

const history = await client.getHistory(botNickName, count);

GetBotInfo

const history = await client.getBotByNickName(botNickName, retryCount, retryIntervalMs);

GetNextData

const history = await client.getNextData();

Can get poe-formkey / buildId / latest messages(like latest 5 messages) and startCursor(use startCursor to fetch history messages) / availableBots / x-forwarded-for / ......

UpdateAllBotInfo

await client.updateAllBotInfo()

This function will fetch poe-formkey, buildId, latest messages, startCursor and all bots info(chatId / id, this two params will be used to ).

This function will set poe-formkey / cookie / buildId / ${botDisplayName}_chatId and ${botDisplayName}_id to .env file(These parameters are the same as cookies and do not need to be requested every time).

Next time you send a msg to any bot, will not need to fetch bot info again, client will get needed params like buildId from local .env file.

Example

SendMessage

example - sendMessage.ts

Multi-account support

example - sendMessage.ts

SetProxy

example - proxy.ts

History

example - history.ts

FetchAllNeededInfo

example - fetchAllNeededInfo.ts

TODO

Notes

Thanks

License

MIT