Skip to content
This repository has been archived by the owner on Sep 18, 2023. It is now read-only.

Discussion about the reasons for poe account bans #118

Closed
fkx816 opened this issue Jun 13, 2023 · 42 comments
Closed

Discussion about the reasons for poe account bans #118

fkx816 opened this issue Jun 13, 2023 · 42 comments
Labels
enhancement New feature or request help wanted Extra attention is needed

Comments

@fkx816
Copy link

fkx816 commented Jun 13, 2023

After going through more than 10 poe accounts in my tests, I found that the banning of poe accounts is related to at least the following behaviors(The following tests were performed using the latest version of poe-api and a proxy server.):

  1. Sending a new request before the bot has finished replying. This will result in a ban if it happens a few times, as mentioned by @SuperLiveYou in other issues.
  2. The interval between requests is too short. I recommend a 9-15 second interval between requests; otherwise, there is a high probability of being banned after 15 requests.
  3. The interval between clearing chat history and sending a message to the bot is too short. Surprisingly, this has a high probability of getting banned, even higher than frequent requests. I suggest taking a 30-second break after clearing the chat history.
  4. I noticed that when using the web version of POE normally, a forced page refresh occurs after a large number of conversations. After avoiding the three behaviors that may cause a ban mentioned above, a situation arises where after 30-35 requests to POE's API, the API is successfully requested but there is no response. (On the web page, it shows that the message was successfully sent, but there is no response from the bot's side. At this time, there is no problem using the web version for conversation.) Continuing to request the API under these circumstances will result in multiple requests with only one or two successful responses, and further requests will lead to a ban. To avoid this situation, I automatically disconnect and reconnect the WebSocket after every 9-15 API requests, then clear the current bot's history after a 30-second interval. This effectively avoids the situation where there are multiple requests but only one or two responses.
  5. Even if the above four situations are avoided, a ban will still occur after more than 40 consecutive requests (in my tests, this happened at 43, 45, and around 60 requests). I am not sure of the reason for this ban.
  6. By the way, I found that when using this project for frequent requests, there is a small probability of successfully responding to the API but the web version shows no response (similar to situation 4 mentioned above, but with a response in the API and only successful sending in the web version with no content on the bot's side). This situation usually occurs when the bot's reply content is minimal, and of course, encountering this situation means that a ban is not far off.

At present, the reason for the 5th type of ban is unclear. After avoiding bans from situations 1-4, it is best not to make more than 40 frequent requests within a short period (I encountered this situation within 10 minutes).

@Seikaijyu
Copy link

If that's the case, this project may require some improvements or adding a wrapper to ensure it won't be banned

@Seikaijyu
Copy link

@fkx816 或许我们可以私下讨论一些解决办法?我Q:1959921673 如果你有兴趣可以交流一下

@ZentixUA
Copy link
Contributor

Same problem for ChimeraGPT

@ZentixUA
Copy link
Contributor

With problems like this, it's better to avoid using poe...

@ading2210 ading2210 added enhancement New feature or request help wanted Extra attention is needed labels Jun 13, 2023
@fkx816
Copy link
Author

fkx816 commented Jun 13, 2023

@fkx816 或许我们可以私下讨论一些解决办法?我Q:1959921673 如果你有兴趣可以交流一下

好的

@haruki-py
Copy link

Why poe even bans users for using api. I suspect the last reassn you provided

@CiaranYoung
Copy link

The fifth is really strange, because the official limit is 25 messages every three hours, which means that heavy users may use it as many as 100 times a day, and poe's subscription service is 600 times a month, why would they block accounts with more than 40 messages a day

@soyelmismo
Copy link

Why poe even bans users for using api.

Cuz they are analytics bitches a.k.a. Quora

@fkx816
Copy link
Author

fkx816 commented Jun 13, 2023

I found that the web version of Poe will send a "receive_POST" post to the server after completing several requests (1-3 times), which includes the bot_response_status, (either "success" or "dropoff", and if there is a bot reply failure, a 'dropoff' message must be sent.) as well as the time it takes for the bot to complete the answer. I don't know if Poe-api simulates this post request, and if not, I think this could be a major difference between the web version and Poe-api.(I don't know if this is related to getting banned)

@fkx816
Copy link
Author

fkx816 commented Jun 13, 2023

The fifth is really strange, because the official limit is 25 messages every three hours, which means that heavy users may use it as many as 100 times a day, and poe's subscription service is 600 times a month, why would they block accounts with more than 40 messages a day

In fact, I have never been banned for using the web version during testing. I made more than fifty rapid requests within ten minutes on the web version without getting banned. Previously, I had more than 160 normal bot conversations within a few hours without being banned. Therefore, it should only be targeted at non-web users.

@haruki-py
Copy link

The fifth is really strange, because the official limit is 25 messages every three hours, which means that heavy users may use it as many as 100 times a day, and poe's subscription service is 600 times a month, why would they block accounts with more than 40 messages a day

Oh but if i send multiple message in web they dont do anything ig

@haruki-py
Copy link

haruki-py commented Jun 13, 2023

Why poe even bans users for using api.

Cuz they are analytics bitches a.k.a. Quora

I agree but please dont use offensive language here. This is a friendly place

@fkx816
Copy link
Author

fkx816 commented Jun 13, 2023

The fifth is really strange, because the official limit is 25 messages every three hours, which means that heavy users may use it as many as 100 times a day, and poe's subscription service is 600 times a month, why would they block accounts with more than 40 messages a day

Oh but if i send multiple message in web they dont do anything ig

Yah, the web version's tolerance is really high, so I think getting banned must be due to something missing , lol.

@Seikaijyu
Copy link

The fifth is really strange, because the official limit is 25 messages every three hours, which means that heavy users may use it as many as 100 times a day, and poe's subscription service is 600 times a month, why would they block accounts with more than 40 messages a day

Oh but if i send multiple message in web they dont do anything ig

This usually represents what is missing from the reverse API, which means there is no perfect reverse

@haruki-py
Copy link

The fifth is really strange, because the official limit is 25 messages every three hours, which means that heavy users may use it as many as 100 times a day, and poe's subscription service is 600 times a month, why would they block accounts with more than 40 messages a day

Oh but if i send multiple message in web they dont do anything ig

This usually represents what is missing from the reverse API, which means there is no perfect reverse

That is correct for evrrything

@haruki-py
Copy link

I thought when the poe api official will be released, i can use it withiut ban but it is another thing and i still using this

@haruki-py
Copy link

How do i contribute

@haruki-py
Copy link

I guess implimenting a way to login with email directly maybe the only way to prevent this. Brcause i guess the code. Runs poe.com somewhere in the ide or wherever.

@2-3-5-7
Copy link

2-3-5-7 commented Jun 14, 2023

I am trying to register multiple accounts and use the tokens in turn to avoid frequent requests from a single token.

@fkx816
Copy link
Author

fkx816 commented Jun 14, 2023

Hey guys, I found a crucial piece of information. Try not to use the clear chat history function and this can significantly extend the life of an account. I've had two test requests reach over 90 times, and it seems like 100 times is the short-term limit for using this project.

@fkx816
Copy link
Author

fkx816 commented Jun 14, 2023

Hey guys, I found a crucial piece of information. Try not to use the clear chat history function and this can significantly extend the life of an account. I've had two test requests reach over 90 times, and it seems like 100 times is the short-term limit for using this project.

The premise is to meet the requirements I mentioned above: avoid using the clear chat history function, timed reconnections, and a certain interval between requests.

@notBradPitt
Copy link

I don't get how people are getting banned, I've been using my main account on Poe and with this API too with zero problems. I may have even surpassed the message limit too on ocassions. The only time I've had an issue is when I used another account registered with temporary email and it logged me out after couple messages.

Really hoping that Poe and this project won't die out because too many people are abusing it for training data or whatever reason. I feel like this is one of the nicer services that I'd actually consider paying for

@2-3-5-7
Copy link

2-3-5-7 commented Jun 17, 2023

Indeed, the GPT-3.5 API is already quite cheap, and the response speed is faster. This is only suitable for individual small-scale use.

@haruki-py
Copy link

hey. I went to poe discord server and asked why they ban people using this. they said automating acciunts. so it means there should be a time interval after each thing you do

@haruki-py
Copy link

Why y’all dislike it

@haruki-py
Copy link

I think heavy users use many time. So maybe adding interval is not a good idea though

@tic-top
Copy link
Contributor

tic-top commented Jun 22, 2023

I try to send a RECEIVE_POST request every 3 turns and maintain a time interval of 2~4 seconds between each request.
After making approximately 300 consecutive requests, my account is still alive.

@tic-top
Copy link
Contributor

tic-top commented Jun 22, 2023

In the poe.py, I add recv_post to the generate_payload function.

import random
def generate_payload(query_name, variables):
  if 'recv' == query_name:
    if random.random() > 0.9:
      return [
          {
            "category": "poe/bot_response_speed",
            "data": variables,
          },
          {
            "category":"poe/statsd_event",
            "data":{
              "key":"poe.speed.web_vitals.INP",
              "value": random.randint(100, 125),
              "category":"time",
              "path":"/[handle]",
              "extra_data":{}
              }
          }
      ]
    else:
      return [
          {
            "category": "poe/bot_response_speed",
            "data": variables,
          }
      ]
  
  return {
    "query": queries[query_name],
    "variables": variables
  }

In the send_query function, I replace

 r = request_with_retries(self.session.post, self.gql_url, data=payload, headers=headers)

with

if query_name == "recv":
        r = request_with_retries(self.session.post, self.gql_recv_url, data=payload, headers=headers)
        return None
      else:
        r = request_with_retries(self.session.post, self.gql_url, data=payload, headers=headers)

In the send_message function,
First, I add one argument called recv:

def send_message(self, chatbot, message, with_chat_break=False, timeout=20, recv=False):

Then I send recv_post after the message is received:

    yield message

    if recv:
      time.sleep(1)
      # send a recv post to the server
      message_data = self.send_query("recv", {
        "bot_name": chatbot,
        "time_to_first_typing_indicator":300,
        "time_to_first_subscription_response":600,
        "time_to_full_bot_response":1100,
        "full_response_length":len(last_text)+1,
        "full_response_word_count":len(last_text.split(' '))+1,
        "human_message_id": human_message_id,
        "bot_message_id": self.active_messages[human_message_id],
        "chat_id": chat_id,
        "bot_response_status":"success"
      })
      time.sleep(1)

    del self.active_messages[human_message_id]
    del self.message_queues[human_message_id]

My test code is attached below:

import time
request = 300
wait_time = 600 / request
for i in range(request):
    input = ['How to make an apple pie?', "What's the relationship between luna and moon?", "How to make a cake?"]
    for chunk in client.send_message('a2', input[i%3],  with_chat_break = True, timeout = 20, recv=(i%3==0)):
        pass
    print('Step',i+1)
    time.sleep(wait_time)

The test takes about 41m46s.
image

@tic-top
Copy link
Contributor

tic-top commented Jun 22, 2023

Besides, I think the daily limit is more than 100 because I have made about 700 requests in 2 hours.

@fkx816
Copy link
Author

fkx816 commented Jun 22, 2023

Amazing. So it seems that RECEIVE_POST may indeed be related to account suspension. The reason I mentioned trying to avoid clearing chat history above is that I found that after clearing the chat history, a RECEIVE_POST about the initial information is always sent. And these ways(timed disconnection and avoiding clearing chat history) now can be considered as clumsy methods of reducing RECEIVE_POST related errors(?)

@tic-top
Copy link
Contributor

tic-top commented Jun 22, 2023

I think you're right. Doing reconnection and avoid regularly clearing chat history can be helpful in reducing errors related to receiving posts.

After doing more tests, here's my findings:

  • Even if you make 600 consecutive requests with 1 second time interval, the account won't be banned.
  • In the "600" test, "Response timed out" occurs at 168, 467.
  • "Clearing chat history" will just send a gql_POST (without RECEIVE_POST). "Clearing chat history" won't lead to account ban.
  • Reconnection 30 times in a row with 1s time interval will result in an account ban.

@tic-top
Copy link
Contributor

tic-top commented Jun 22, 2023

Now we can enjoy playing with the POE API with less issues. 😂

@TheLime1
Copy link
Contributor

@tic-top can you pull request the code in examples please

@tic-top
Copy link
Contributor

tic-top commented Jun 22, 2023

@TheLime1 Sure!

@noseon
Copy link

noseon commented Jun 29, 2023

the right thing is to implement the fifo system api to process the questions one at a time with time configuration between them

@noseon
Copy link

noseon commented Jun 29, 2023

I got banned on 3 accounts right and set up a fifo queue directly in the api so I would have effective control. in case I have a code that does this but it works outside the api

@haruki-py
Copy link

Uhm

@haruki-py
Copy link

I think you're right. Doing reconnection and avoid regularly clearing chat history can be helpful in reducing errors related to receiving posts.

After doing more tests, here's my findings:

  • Even if you make 600 consecutive requests with 1 second time interval, the account won't be banned.
  • In the "600" test, "Response timed out" occurs at 168, 467.
  • "Clearing chat history" will just send a gql_POST (without RECEIVE_POST). "Clearing chat history" won't lead to account ban.
  • Reconnection 30 times in a row with 1s time interval will result in an account ban.

Im gonna try it

@haruki-py
Copy link

im gonna make change in poe.py to sleep 1s if there is a message

@fkx816
Copy link
Author

fkx816 commented Jun 30, 2023

The solution by tic-top has currently resolved the account blocking issue, and it seems to have been added to the code.

@fkx816 fkx816 closed this as completed Jun 30, 2023
@ading2210
Copy link
Owner

The recv_post code has been merged and is present in v0.4.8.

@haruki-py
Copy link

The recv_post code has been merged and is present in v0.4.8.

So i wont get banned?

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests