Задать вопрос
@buxoy

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

Нужно написать код для получения удаленного доступа к серверу Minecraft, так чтобы я смогу через дискорд бота выдавать наказания игрокам, а так-же выдавать им привилегии, подскажите пожалуйста как это сделать.
  • Вопрос задан
  • 1871 просмотр
Подписаться 1 Средний Комментировать
Решения вопроса 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(), чтобы подсунуть серверу новую команду на стандартный ввод, и прочитать его лог со стандартного вывода. Например, храни список команд, которые надо отправить, а в цикле проверяй его. Тогда достаточно будет подложить команду в список, чтобы она потом отправилась. Выхлоп сервера можно перенаправлять по мере поступления в какой-нибудь приватный канал дискорда, для мониторинга и отладки.
Как сделать этот цикл параллельно с работой бота, думай сам - ты не указал библиотеку для дискорда. Если это дискорд.пи, то там есть механизм для периодического вызова функций. Читай документацию.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы