@buxoy

Как сделать удаленный доступ к консоли сервера «Minecraft»?

Нужно написать код для получения удаленного доступа к серверу Minecraft, так чтобы я смогу через дискорд бота выдавать наказания игрокам, а так-же выдавать им привилегии, подскажите пожалуйста как это сделать.
  • Вопрос задан
  • 1413 просмотров
Решения вопроса 1
@buxoy Автор вопроса
Кому необходим сам код подключения, и без всякой воды которая была написана участниками сообщества.
Все делается довольно очень просто:

1) Импортируем пакеты:
import mctools
from mctools import  RCONClient


2) Копируйте пример который представил ниже:

@client.command(aliases=['куратор'])
        @commands.has_any_role(789535566453800980, 894233621890732092, 800090778943750174, 936225667094282240)
        async def givecurator(ctx, server = None, member = None, reason = None):
            if server is None:
                return await ctx.reply('''
Укажите номер сервера!

**Список серверов:**
1 - Выживание 
2 - BedWars
                ''')
            if member is None:
                return await ctx.reply('Укажите NickName игрока')
            if reason is None:
                return await ctx.reply('Укажите причину выдачи привилегии')
            if server == '1': #выживание 
                HOST = '0.0.0.0.0'
                PORT = 0000

                rcon = RCONClient(HOST, port = PORT)
                if rcon.login('пароль'):
                    resp = rcon.command(f'lp user {member} parent set curator') #происходит сама выдача
                    rcon.stop()
                            
                await ctx.reply(f'''
Вы выдали привилегию curator игроку {member} на 1 сервер. Причина: {reason}
            ''')
                return
            if server == '2': #bedwars
                HOST = '0.0.0.0.0'
                PORT = 0000

                rcon = RCONClient(HOST, port = PORT)
                if rcon.login('пароль'):
                    resp = rcon.command(f'lp user {member} parent set curator') #команда для выдачи привы
                    rcon.stop()
                            
                await ctx.reply(f'''
Вы выдали привилегию curator игроку {member} на 1 сервер. Причина: {reason}
            ''')
                return


Думаю что всем все будет понятно, считайте готовый ответ уже на данный вопрос!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@rPman
берешь что то типа этого и контролируешь из своего дискорд бота
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Наиболее простой способ - держать и сервер, и бота на одной машине, и запускать процесс сервера как дочерний к процессу бота. Сервер стартуешь с опцией --nogui, тогда он будет читать команды со стандартного входа, а лог консоли писать или на стандартный вывод или на stderr, нужно смотреть куда именно.
Так как тебе нужно, чтобы дочерний процесс работал параллельно с основным, то вместо обычных функций из модуля subprocess нужно использовать subprocess.Popen.
После этого периодически вызываешь Popen.communicate(), чтобы подсунуть серверу новую команду на стандартный ввод, и прочитать его лог со стандартного вывода. Например, храни список команд, которые надо отправить, а в цикле проверяй его. Тогда достаточно будет подложить команду в список, чтобы она потом отправилась. Выхлоп сервера можно перенаправлять по мере поступления в какой-нибудь приватный канал дискорда, для мониторинга и отладки.
Как сделать этот цикл параллельно с работой бота, думай сам - ты не указал библиотеку для дискорда. Если это дискорд.пи, то там есть механизм для периодического вызова функций. Читай документацию.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы