无法在 balebot 中使用 time.sleep() 发送一组消息
Can't send a set of messages with time.sleep() in balebot
我需要使用 balebot python SDK 向一组 bale 用户发送短信。我想直接发送给他们,不想等待他们开始与我的机器人对话。我有他们的 user_id 和 access_hash。我试过这段代码,但遇到了 'HIT_LIMIT' 错误。
BotErrorResponse { _id: '1001', _body: { code: 403, tag:
'HIT_LIMIT', data: {}, retryIn: null }, code: 403, tag:
'HIT_LIMIT', data: {}, 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)
这是因为 asyncio 和 time.sleep() 与 together.If 不匹配我是你我会使用 asyncio.get_event_loop() 而不是 for 循环和 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()
我需要使用 balebot python SDK 向一组 bale 用户发送短信。我想直接发送给他们,不想等待他们开始与我的机器人对话。我有他们的 user_id 和 access_hash。我试过这段代码,但遇到了 'HIT_LIMIT' 错误。
BotErrorResponse { _id: '1001', _body: { code: 403, tag: 'HIT_LIMIT', data: {}, retryIn: null }, code: 403, tag: 'HIT_LIMIT', data: {}, 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)
这是因为 asyncio 和 time.sleep() 与 together.If 不匹配我是你我会使用 asyncio.get_event_loop() 而不是 for 循环和 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()