CloseFun Bot 1.3
unknown
python
3 years ago
4.9 kB
5
Indexable
import vk_api from vk_api.longpoll import VkLongPoll, VkEventType from vk_api.keyboard import VkKeyboard, VkKeyboardColor from mcstatus import JavaServer from os import path import yaml import time import random token = "30be428fa96b7d582b6a1a896c008beee8de9850513b67e27bceb45747fb71c0a51cf5067b24f84395c51" vk = vk_api.VkApi(token=token) give = vk.get_api() longpoll = VkLongPoll(vk) server = JavaServer.lookup("CloseFun.aternos.me:41473") def write_message(id, text, keyboard=None): """Функция отправки сообщений.""" vk.method('messages.send', { 'user_id': id, 'message': text, 'random_id': 0, 'keyboard': keyboard}) def get_server_status(): """Функция для получения информации о статусе сервера.""" status = server.status() players_online = status.players.online latency = status.latency status_msg = f"Сервер ответил за: {int(latency)}мс.\n\n" status_msg += "Адрес: CloseFun.aternos.me\n" status_msg += f"Пинг сервера: {int(server.ping())}мс.\n" status_msg += "Версия: 1.16.5.\n" status_msg += "Ядро: Fabric.\n" status_msg += f"Игроков на сервере: {players_online}. " if players_online == 0: status_msg += "Вероятно сервер выключен.\nИгроки:\nПусто" else: status_msg += "\nИгроки:\n" status_msg += str([f"{player.name};" for player in server.players.sample]) return status_msg def get_status_warning(): """Функция отправки предупреждения вкладки 'Статус'.""" return f"Отправляю запрос серверу. Это может занять некоторое время." def add_keyboard_buttons(keyboard): """Функция для добавления кнопок на вк клавиатуру.""" keyboard.add_button( "Ресурспаки", color=VkKeyboardColor.PRIMARY) keyboard.add_button("Координаты", color=VkKeyboardColor.PRIMARY) keyboard.add_line() keyboard.add_button("Проекты", color=VkKeyboardColor.PRIMARY) keyboard.add_button("Сид", color=VkKeyboardColor.PRIMARY) keyboard.add_line() keyboard.add_button("Статус", color=VkKeyboardColor.POSITIVE) keyboard.add_line() keyboard.add_button("Рестартнуть эту панель", color=VkKeyboardColor.NEGATIVE) return keyboard def auto_restart(func): """Авто перезапуск функций""" def wrapper(*args, **kwargs): while True: try: func(*args,**kwargs) break except Exception as err: print(err) print("Перезапуск через 5 секунд") time.sleep(5) print("Перезапускаю...") return func(*args, **kwargs) return wrapper @auto_restart def main(): """CloseFun Bot 1.3""" #Получение пути к скрипту dir_path = path.dirname(path.abspath(__file__)) #Запись паттернов with open(path.join(dir_path, 'commands.yaml'), encoding='utf-8') as file: docs = yaml.safe_load(file) #Особые сообщения error_msg = docs['intents'][0]['responses'] commands_msg = docs['intents'][1]['responses'] #Цикл бота for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me: #Конвертация сообщений в приемлемый формат input_message = event.text.capitalize() input_message = input_message.strip('!?.,()') input_message = input_message.replace('ё', 'е') id = event.user_id #Вызов ответа на сообщение for intent in docs['intents']: if input_message in intent['patterns']: write_message(id, random.choice(intent['responses'])) break #Особые паттерны + ошибка else: if input_message in ("Начать","Рестартнуть эту панель"): keyboard = VkKeyboard() keyboard = add_keyboard_buttons(keyboard) write_message(id, commands_msg, keyboard=keyboard.get_keyboard()) elif input_message == "Статус": write_message(id, get_status_warning()) auto_restart(write_message(id, get_server_status())) else: write_message(id, error_msg) if __name__ == "__main__": main()
Editor is loading...