skip to Main Content

After the start of the bans of accounts connected to my project, I changed the system for receiving new messages in the telegram account. Previously, I implemented it through a handler, now it is possible to connect several accounts, performing actions with unread messages on each one in turn. Code:

async def start_wtf_blyat():
global client, current_session_account
while True:
    for cl in clients:
        current_session_account = cl[0]
        client = cl[1]
        print(f'Choosing {current_session_account.session_name}')

        if current_session_account.start_time is not None:
            if current_session_account.start_time > dt.datetime.utcnow():
                print(
                    f"{current_session_account.session_name}: {current_session_account.start_time.strftime('%d.%m.%Y %H:%M:%S')} > {dt.datetime.utcnow().strftime('%d.%m.%Y %H:%M:%S')}")
                s_d = (current_session_account.start_time - dt.datetime.utcnow().replace(
                    microsecond=0)) * random.randrange(
                    1, 3)
                print(f'{current_session_account.session_name} needs to sleep {s_d.seconds} seconds')
                await asyncio.sleep(s_d.seconds)
                print(f'{current_session_account.session_name}: Sleep complete!')
        current_session_account.start_time = dt.datetime.utcnow().replace(microsecond=0)

        current_session_account.activate()

        async with client:
            print(f'Starting {current_session_account.session_name}')
            await check_news()

        print(
            f'{current_session_account.session_name}: Work complete! END: {current_session_account.end_time.strftime("%d.%m.%Y %H:%M:%S")}')

Then the necessary messages are selected in the check_news():

async def check_news():
global current_session_account, ME
ME = await client.get_me()

await asyncio.sleep(random.randrange(1, 5, 1))
# try:
x = [[d.unread_count, d.entity.id, d.title] for d in await client.get_dialogs() if
     not getattr(d.entity, 'is_private', False) and type(d.entity) == Channel
     and d.unread_count != 0 and d.entity.id in INPUT_CHANNELS_IDS]

if not x:
    rnd_sleep = random.randrange(180, 300)
    print(f'{current_session_account.session_name}: No channels, sleep for {rnd_sleep} seconds')

    end_time = dt.datetime.utcnow().replace(microsecond=0)

    start_time = current_session_account.start_time

    if start_time is not None:
        if start_time < end_time:
            delta = end_time - start_time + dt.timedelta(seconds=rnd_sleep)
    else:
        delta = dt.timedelta(seconds=rnd_sleep)

    print(f'{current_session_account.session_name} START: {start_time.strftime("%d.%m.%Y %H:%M:%S")}, '
          f'END: {end_time.strftime("%d.%m.%Y %H:%M:%S")}, '
          f'DELTA: {delta}, '
          f'NEXT START {(end_time + delta).strftime("%d.%m.%Y %H:%M:%S")}')

    current_session_account.set_times(delta)
    current_session_account.deactivate()
    return

for da in x:
    print(f'{current_session_account.session_name}: {x.index(da) + 1} of {len(x)}')

    await asyncio.sleep(random.randrange(1, 5, 1))

    async for msg in client.iter_messages(da[1], limit=da[0]):
        await asyncio.sleep(random.randrange(3, 5, 1))
        await msg.mark_read()

        if msg.text is None:
            continue

        comm_result_true = await Magic.detect_commercial(msg.text)
        antiplagiat_result = await antiplagiat(msg)

        if not comm_result_true and antiplagiat_result:
            await send_this_post(msg, da[1])
        else:
            print(f'{current_session_account.session_name}: Commercial or plagiat!')

# finally:

end_time = dt.datetime.utcnow().replace(microsecond=0)

start_time = current_session_account.start_time

if start_time is not None:
    if start_time < end_time:
        delta = end_time - start_time + dt.timedelta(seconds=1)
else:
    delta = dt.timedelta(seconds=2)

print(f'{current_session_account.session_name} START: {start_time.strftime("%d.%m.%Y %H:%M:%S")}, '
      f'END: {end_time.strftime("%d.%m.%Y %H:%M:%S")}, '
      f'DELTA: {delta}, '
      f'NEXT START {(end_time + delta).strftime("%d.%m.%Y %H:%M:%S")}')

current_session_account.set_times(delta)
current_session_account.deactivate()

return

Finally, the message is processed, the media is downloaded, if any, the text is saved. And other actions are no longer related to the telegram api.

async def send_this_post(msg, result):
chan = db.get_input_channel(result)
if db.using_ai(chan[1]):
    check = await Magic.detect_theme(msg.text)
    if check:
        msg_category = CAT_DEF[f'{check}']
    else:
        return
else:
    msg_category = db.get_category_by_input_channel_name(chan[1])

print(f'Theme - {msg_category}')

test = await MSG(msg_cat=msg_category, txt=msg.text, title=chan[2], username=chan[1], datetime=msg.date)
await test.create_media(msg)
await test.create_voice()
await test.create_translates()

await send_to_users_test(test)
return

Everything starts as follows:

if __name__ == '__main__':
    logging.warning('IZVESTNIK STARTED.')
    loop = asyncio.get_event_loop()
    bot.start(bot_token=settings.bot_TOKEN)
    logging.warning(f'BOT {settings.bot_username} just launched.')

    loop.create_task(usr_periods_activity())
    loop.create_task(usr_msg_queue_activity())
    loop.create_task(start_wtf_blyat())
    bot.loop.run_forever()

In fact, all that each account does is receive unread messages, download media, mark them as read, but even the launch of 8 accounts resulted in the ban of each of them for 3 days, either in general without an error, or with an Account deactivated/deleted error (Caused get_dialogs request).

Although many users of the telegram application do many times more actions. Recently rereading the documentation, I came across this:
Text from documentation.
Perhaps the reason is that I am from Russia, and I use Russian SIM cards to register accounts, but a friend from England bought SIM cards for me there several times, but they also received a ban. The project release is located on the WDM server, the ip is also Russian, maybe that’s the problem?

2

Answers


  1. Chosen as BEST ANSWER

    The solution of this issue is just write an "impulse" activity script against pooling script. Also use SIM cards from another country for telegram accounts and proxy.


  2. I also recommend to use different version

    pip install Telethon==1.1

    this version can’t ban your account

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search