CloseFun Bot 1.3
unknown
python
4 years ago
4.9 kB
7
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...