Когда я пишу боту, например:
/stats (code) , то день он создает график в виде картинки и отправляет в VK.
На это уходит 1-2 минуты. За это время не могу выполнять лёгкие команды или снова
/stats (code).
Как сделать так, чтобы люди могли использовать любые команды и не зависело от того, что команды занята и пока не выводится команда итога, то ничего работать не будет?
import vk_api
from vk_api.bot_longpoll import VkBotEventType, VkBotLongPoll
import random
import json
import asyncio
import sys
from datetime import datetime
from message_utils import handle_button_click
from db_utils import is_user_banned, is_user_admin, get_bot_settings, create_user_if_not_exists, close_mysql_connection, open_mysql_connection
from admin import system_protocol
from api_server import ip_api
from message_utils import (
handle_stat_command,
bot_stat_command,
toponline_server,
servers_list,
process_server_request_and_send_vk,
test_server,
help_bot,
comparison_server,
alias_list,
add_servers,
removes_servers,
add_alias,
log_message,
whois_domen,
lang_command,
ip_check,
delete_bot_on_new_message
)
from vk_config import VK_TOKEN, VK_GROUP_ID
def log_message1(message):
try:
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_entry = f"[{timestamp}] {message}"
with open("log1.txt", "a") as log_file:
log_file.write(log_entry + "\n")
except Exception as e:
print("Ошибка при записи сообщения в лог:", e)
async def handle_longpoll_events(vk_session, vk, longpoll):
db_connection = open_mysql_connection()
try:
while True:
try:
for event in longpoll.listen():
event_json = json.dumps(event.raw, indent=4, ensure_ascii=False)
if event.type == VkBotEventType.MESSAGE_NEW or event.type == VkBotEventType.MESSAGE_EVENT:
peer_id = event.obj.message['peer_id']
message = event.obj.message['text']
vk_id = event.obj.message['from_id']
create_user_if_not_exists(vk_id)
if message.startswith('/comparison') or message.startswith('/сравнить'):
await comparison_server(peer_id, message, vk_id, vk)
except Exception as e:
log_message1(f"Ошибка LongPull {e}")
close_mysql_connection(db_connection)
db_connection = open_mysql_connection()
finally:
close_mysql_connection(db_connection)
async def main():
vk_session = vk_api.VkApi(token=VK_TOKEN)
vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, VK_GROUP_ID)
while True:
try:
await handle_longpoll_events(vk_session, vk, longpoll)
except Exception as e:
log_message(f"Ошибка Main {e}")
sys.exit(1)
if __name__ == "__main__":
asyncio.run(main())