diff --git a/mc_discord_bot.py b/mc_discord_bot.py new file mode 100644 index 0000000..b87137b --- /dev/null +++ b/mc_discord_bot.py @@ -0,0 +1,83 @@ +import discord +from discord.ext import commands +import requests +import os +from dotenv import load_dotenv +import random +import multiprocessing + +# Variables +BOT_NAME = "MinecraftBot" +load_dotenv() +DISCORD_TOKEN = os.getenv("DISCORD_TOKEN") + +minecraft_server_url = "lightmc.fun" # this is just an example, and you should use your own minecraft server + +bot_help_message = """ +:: Bot Usage :: +`!mc help` : shows help +`!mc serverusage` : shows system load in percentage +`!mc serverstatus` : shows if the server is online or offline +`!mc whoisonline` : shows who is online at the moment +""" + +available_commands = ['help', 'serverusage', 'serverstatus', 'whoisonline'] + +# Set the bot command prefix +bot = commands.Bot(command_prefix="!") + +# Executes when the bot is ready +@bot.event +async def on_ready(): + print(f'{bot.user} succesfully logged in!') + +# Executes whenever there is an incoming message event +@bot.event +async def on_message(message): + print(f'Guild: {message.guild.name}, User: {message.author}, Message: {message.content}') + if message.author == bot.user: + return + + if message.content == '!mc': + await message.channel.send(bot_help_message) + + if 'whosonline' in message.content: + print(f'{message.author} used {message.content}') + await bot.process_commands(message) + +# Executes when the command mc is used and we trigger specific functions +# when specific arguments are caught in our if statements +@bot.command() +async def mc(ctx, arg): + if arg == 'help': + await ctx.send(bot_help_message) + + if arg == 'serverusage': + cpu_count = multiprocessing.cpu_count() + one, five, fifteen = os.getloadavg() + load_percentage = int(five / cpu_count * 100) + await ctx.send(f'Server load is at {load_percentage}%') + + if arg == 'serverstatus': + response = requests.get(f'https://api.mcsrvstat.us/2/{minecraft_server_url}').json() + server_status = response['online'] + if server_status == True: + server_status = 'online' + await ctx.send(f'Server is {server_status}') + + if arg == 'whoisonline': + response = requests.get('https://api.mcsrvstat.us/2/{minecraft_server_url}').json() + players_status = response['players'] + if players_status['online'] == 0: + players_online_message = 'No one is online' + if players_status['online'] == 1: + players_online_username = players_status['list'][0] + players_online_message = f'1 player is online: {players_online_username}' + if players_status['online'] > 1: + po = players_status['online'] + players_online_usernames = players_status['list'] + joined_usernames = ", ".join(players_online_usernames) + players_online_message = f'{po} players are online: {joined_usernames}' + await ctx.send(f'{players_online_message}') + +bot.run(DISCORD_TOKEN)