diff --git a/README.md b/README.md index f424c35..aded00c 100644 --- a/README.md +++ b/README.md @@ -13,13 +13,51 @@ Forked from [SparkBot](https://github.com/jkkicks/SparkBot) ## Installation -Requires Python 3. +- Get this source code: -- Run `pip install -r requirements.txt` +``` +cd /opt +git clone https://git.zyphon.com/will/MineBot.git +cd MineBot +``` + +- It's best to run services as non-root users: +``` +sudo useradd minebot +sudo mkdir /home/minebot +sudo chown minebot:minebot /home/minebot +sudo chown -R minebot:minebot /opt/MineBot +``` + +- Create a startup script (this is for systemd on i.e. Ubuntu): + +``` +[Unit] +Description=MineBot Service +After=multi-user.target + +[Service] +Type=simple +User=minebot +Group=minebot +Restart=always +WorkingDirectory=/opt/MineBot +ExecStart=/usr/bin/python3 /opt/MineBot/main.py + +[Install] +WantedBy=multi-user.target +``` + +- This bot requires Python 3, so ensure you have that on your system. +- Run `sudo -u minebot pip install -r requirements.txt` to install Python dependencies. ## Running -Run `python3 main.py` +- Run `sudo service minebot start` or for testing/development you can run `python3 main.py` +- Hide sensitive data from other users: + - `sudo chmod 600 /opt/MineBot/bot_data.db /opt/MineBot/bot.log .env` +- You probably want to run MineBot automatically on system startup: + - `sudo systemctl enable minebot` ## Usage diff --git a/main.py b/main.py index 1fbef29..5c62bca 100644 --- a/main.py +++ b/main.py @@ -4,7 +4,7 @@ from discord import app_commands import os from dotenv import load_dotenv import sqlite3 -import logging +import logging as logginglib from datetime import datetime, timezone from discord import ui, Interaction import random @@ -21,8 +21,21 @@ load_dotenv() TOKEN = os.getenv('BOT_TOKEN') # Setup logging -logging.basicConfig(filename='bot.log', level=logging.INFO) - +logging = logginglib.getLogger(__name__) +handler = logginglib.StreamHandler() +formatter = logginglib.Formatter('[{levelname:<8}] {message}', style='{') +logging.setLevel(logginglib.INFO) +handler.setLevel(logginglib.INFO) +handler.setFormatter(formatter) +logging.addHandler(handler) +# Modify Discord logging +discLog = logginglib.getLogger('discord') +handler = logginglib.StreamHandler() +formatter = logginglib.Formatter('[{levelname:<8}] {name}: {message}', style='{') +discLog.setLevel(logginglib.INFO) +handler.setLevel(logginglib.INFO) +handler.setFormatter(formatter) +discLog.addHandler(handler) ## Function and Class Definitions ## @@ -194,7 +207,7 @@ async def listservers(interaction: discord.Interaction): for row in c.fetchall(): o += '- **ID**: {}\n - **Status URL**: {}\n - **Join URL**: {}\n'.format(row[0], row[1], row[2]) if o == "": - o = "No servers." + o = "You're not added to any servers." await interaction.response.send_message(content=o, ephemeral=True) @@ -313,4 +326,4 @@ with sqlite3.connect('bot_data.db') as conn: conn.commit() # Start bot -bot.run(TOKEN) +bot.run(TOKEN, log_handler=None)