int() argument must be a string, a bytes-like object or a number, not 'builtin_function_or_method'
Я работаю над ВК Ботом на Python.
Я делаю мини-игру в своём боте, и чтобы не нагружать так сильно свой ПК (сервер держу на ПК пока что) и поэтому решил сделать автокик за бездействие в течении 15 минут.
Написал:
def auto_kick_d(id):
import vk_api
import json
from vk_api.longpoll import VkLongPoll, VkEventType
from vk_api.utils import get_random_id
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from tokens import main_token
group_id = 189400545
import time, os
idFile = f'.../Data/Users/{id}.dat' # Получение пути к файлу пользователя в БД (База Данных)
auto_kick_file = f'{s_way}/AutoKick/{id}' # Путь к файлу автокика пользователя (данном файле считается время). s_way = путь к файлам игры
with open(auto_kick_file, 'w') as f: # Создаём файл автокика
f.write('900')
def upload_time(id): # Функция для сброса времени на 15 минут
auto_kick_file = f'{s_way}/AutoKick/{id}'
with open(auto_kick_file, 'r') as f:
path = pathlib.Path(auto_kick_file); path.write_text(path.read_text().replace(f.read(), '900'))
def get_msg(id): # Получить сообщения (сделал через функцию, чтобы не вставлять всё в цикл for, а то будет каша)
vk_session = vk_api.VkApi(token = main_token) # Загружаем vk-api ШАГ-1
vk = vk_session.get_api() # Загружаем vk-api ШАГ-2
longpoll = VkLongPoll(vk_session) # Загружаем vk-api ШАГ-3
for event in longpoll.listen(): # Получаем события
if event.type == VkEventType.MESSAGE_NEW: # Если новое сообщение
if event.to_me and event.from_user: # Если отправлено сообществу (а не от него) и в лс (а не из беседы)
if event.user_id == id: # Если написал нужный пользователь
return True
else:
return False
while True:
with open(idFile, 'r') as f:
botBanned = f.read().splitlines()[8].replace('Забанен для Бота: ', '') # Проверяем причину игнора
if botBanned == 'Да (Игра)': # Если в игре (main бот и games бот - разные консоли, поэтому, чтобы main не реагировал на сообщения внутри игры, я отправляю пользователя в игнор. лист)
if get_msg(id): # Если get_msg вернул True, т.е. пользователь написал
upload_time(id) # Сбрасываем время до 15 минут
else: # Если False
with open(auto_kick_file, 'r') as f:
if int(f.read()) > 0: # Если время больше 0 секунд
path = pathlib.Path(auto_kick_file); path.write_text(path.read_text().replace(f.read(), f'{int(f.read()-1)}')) # -1 секунда времени
else:
return False # Если написано 0 или меньше, закрываем работу автокика (время вышло)
time.sleep(1) # Ждём секунду (Для таймера)
else: # Если причина игнорирования другая (или её вообще нет)
os.remove(auto_kick_file)
return False
auto_kick = Thread(target=auto_kick_d, args=(id,)) # Создаём поток
auto_kick.start() # Запускаем поток без поток.join(), чтобы он работал одновременно с другими функциями.
Возвращает: int() argument must be a string, a bytes-like object or a number, not 'builtin_function_or_method'
Проблема в том, что Python в таких ошибках просто не указывает строку(-и) из-за которых возникла ошибка.
Можете помочь?