Не удается отправить набор сообщений с time.sleep () в balebot - PullRequest
0 голосов
/ 23 мая 2018

Мне нужно отправить текстовое сообщение группе пользователей тюков с SDK balebot python.Я хочу отправить их напрямую и не хочу ждать, пока они начнут разговор с моим ботом.У меня есть их user_id и access_hash.Я пробовал этот код, но столкнулся с ошибкой 'HIT_LIMIT'.

BotErrorResponse {_id: '1001', _body: {code: 403, тег: 'HIT_LIMIT', данные: {}, retryIn: null}, код: 403, тег: 'HIT_LIMIT', данные: {}, retryIn: null}

Я использовал цикл for для их повторной отправки с помощью time.sleep ()но когда я использую эту sendMessage функция не работает!

Код

def success(response, user_data):
print("success : ", response)
print(user_data)


def failure(response, user_data):
print("failure : ", response)
print(user_data)


def send_message(bot, update):
for peer in save_peers:
    bot.send_message(TextMessage("Text"), Peer(peer_type=PeerType.user, peer_id=peer["id"],
    access_hash=peer["accessHash"]),
    success_callback=success, failure_callback=failure)
    time.sleep(2)

1 Ответ

0 голосов
/ 23 мая 2018

Это потому, что asyncio и time.sleep () не совпадают вместе. Если бы вы были, я бы использовал asyncio.get_event_loop () вместо for loop и time.sleep ().Вот пример кода:

save_peers = [{"$type": "User", "id": 128521332, "accessHash": "9256310829016723727"},
              {"$type": "User", "id": 928571821, "accessHash": "4540300829906797423"}
              ]
limit_message = 50000
bot_send_delay = 2
my_send_loop = asyncio.get_event_loop()
my_send_loop2 = asyncio.get_event_loop()


def send_message(bot, how_many, message_number, loop):
    print("sending for ", message_number, " st time")

    my_send_loop2.call_soon(send_message2, bot, len(save_peers), 0, my_send_loop2)

    if message_number < how_many:
        loop.call_later(bot_send_delay, send_message, bot, how_many, message_number + 1, loop)
    else:
        print("index finished")

def send_message2(bot, top, down, loop):
    print("sending for ", down, " st time")
    if down < top:
        bot.send_message(TextMessage("TEXT"), Peer(peer_type=PeerType.user, peer_id=save_peers[down]["id"],
                                                   access_hash=save_peers[down]["accessHash"]),
                         success_callback=success, failure_callback=failure)
        loop.call_later(bot_send_delay, send_message2, bot, top, down + 1, loop)


my_send_loop.call_soon(send_message, bot, limit_message, 0, my_send_loop)

updater.run()
...