feat: Implements auto-updating database table
- Automatically updates database table from old versions / Invitarr - Fancy text formatting to boost my ego - Removes synced variable from config, as we now sync always (guild-specific sync is automatic.) task: gh-9
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from pickle import FALSE
|
||||
import app.bot.helper.jellyfinhelper as jelly
|
||||
from app.bot.helper.textformat import bcolors
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
from discord import app_commands
|
||||
@@ -27,7 +28,6 @@ try:
|
||||
PLEXPASS = config.get(BOT_SECTION, 'plex_pass')
|
||||
PLEX_SERVER_NAME = config.get(BOT_SECTION, 'plex_server_name')
|
||||
except:
|
||||
print("Could not load plex config")
|
||||
plex_configured = False
|
||||
|
||||
# Get Plex roles config
|
||||
@@ -90,11 +90,6 @@ try:
|
||||
except:
|
||||
USE_PLEX = False
|
||||
|
||||
try:
|
||||
synced = not (float(config.get(BOT_SECTION, "sync_version")) < MEMBARR_VERSION)
|
||||
except:
|
||||
synced = False
|
||||
|
||||
if USE_PLEX and plex_configured:
|
||||
try:
|
||||
print("Connecting to Plex......")
|
||||
@@ -120,9 +115,11 @@ class app(commands.Cog):
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_ready(self):
|
||||
print('Made by Yoruio https://github.com/Yoruio/')
|
||||
print('Forked from Invitarr https://github.com/Sleepingpirates/Invitarr')
|
||||
print('Named by lordfransie')
|
||||
print('------')
|
||||
print(bcolors.AUTHOR + "{:^41}".format(f"MEMBARR V {MEMBARR_VERSION}") + bcolors.ENDC)
|
||||
print(f'{bcolors.AUTHOR}Made by Yoruio https://github.com/Yoruio/{bcolors.ENDC}')
|
||||
print(f'Forked from Invitarr https://github.com/Sleepingpirates/Invitarr')
|
||||
print(f'Named by lordfransie')
|
||||
print(f'Logged in as {self.bot.user} (ID: {self.bot.user.id})')
|
||||
print('------')
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ config = configparser.ConfigParser()
|
||||
CONFIG_KEYS = ['username', 'password', 'discord_bot_token', 'plex_user', 'plex_pass',
|
||||
'plex_roles', 'plex_server_name', 'plex_libs', 'owner_id', 'channel_id',
|
||||
'auto_remove_user', 'jellyfin_api_key', 'jellyfin_server_url', 'jellyfin_roles',
|
||||
'jellyfin_libs', 'plex_enabled', 'jellyfin_enabled', 'sync_version']
|
||||
'jellyfin_libs', 'plex_enabled', 'jellyfin_enabled']
|
||||
|
||||
# settings
|
||||
Discord_bot_token = ""
|
||||
@@ -133,12 +133,6 @@ except:
|
||||
print("Could not get Plex enable config. Defaulting to False")
|
||||
USE_PLEX = False
|
||||
|
||||
try:
|
||||
synced = not (float(config.get(BOT_SECTION, "sync_version")) < MEMBARR_VERSION)
|
||||
except:
|
||||
print("Could not find previously synced version. Setting synced to false.")
|
||||
synced = False
|
||||
|
||||
def get_config():
|
||||
"""
|
||||
Function to return current config
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import sqlite3
|
||||
|
||||
from app.bot.helper.dbupdater import check_table_version, update_table
|
||||
|
||||
DB_URL = 'app/config/app.db'
|
||||
DB_TABLE = 'clients'
|
||||
|
||||
def create_connection(db_file):
|
||||
""" create a database connection to a SQLite database """
|
||||
@@ -26,7 +29,7 @@ def checkTableExists(dbcon, tablename):
|
||||
conn = create_connection(DB_URL)
|
||||
|
||||
# Checking if table exists
|
||||
if checkTableExists(conn, 'clients'):
|
||||
if checkTableExists(conn, DB_TABLE):
|
||||
print('Table exists.')
|
||||
else:
|
||||
conn.execute(
|
||||
@@ -38,6 +41,8 @@ else:
|
||||
PRIMARY KEY("id" AUTOINCREMENT)
|
||||
);''')
|
||||
|
||||
update_table(conn, DB_TABLE)
|
||||
|
||||
def save_user_email(username, email):
|
||||
if username and email:
|
||||
conn.execute(f"""
|
||||
|
||||
65
app/bot/helper/dbupdater.py
Normal file
65
app/bot/helper/dbupdater.py
Normal file
@@ -0,0 +1,65 @@
|
||||
import sqlite3
|
||||
|
||||
CURRENT_VERSION = 'Membarr V1.1'
|
||||
|
||||
table_history = {
|
||||
'Invitarr V1.0': [
|
||||
(0, 'id', 'INTEGER', 1, None, 1),
|
||||
(1, 'discord_username', 'TEXT', 1, None, 0),
|
||||
(2, 'email', 'TEXT', 1, None, 0)
|
||||
],
|
||||
'Membarr V1.1': [
|
||||
(0, 'id', 'INTEGER', 1, None, 1),
|
||||
(1, 'discord_username', 'TEXT', 1, None, 0),
|
||||
(2, 'email', 'TEXT', 0, None, 0),
|
||||
(3, 'jellyfin_username', 'TEXT', 0, None, 0)
|
||||
]
|
||||
}
|
||||
|
||||
def check_table_version(conn, tablename):
|
||||
dbcur = conn.cursor()
|
||||
dbcur.execute(f"PRAGMA table_info({tablename})")
|
||||
table_format = dbcur.fetchall()
|
||||
for app_version in table_history:
|
||||
if table_history[app_version] == table_format:
|
||||
return app_version
|
||||
raise ValueError("Could not identify database table version.")
|
||||
|
||||
def update_table(conn, tablename):
|
||||
version = check_table_version(conn, tablename)
|
||||
print('------')
|
||||
print(f'DB table version: {version}')
|
||||
if version == CURRENT_VERSION:
|
||||
print('DB table up to date!')
|
||||
print('------')
|
||||
return
|
||||
|
||||
# Table NOT up to date.
|
||||
# Update to Membarr V1.1 table
|
||||
if version == 'Invitarr V1.0':
|
||||
print("Upgrading DB table from Invitarr v1.0 to Membarr V1.1")
|
||||
# Create temp table
|
||||
conn.execute(
|
||||
'''CREATE TABLE "membarr_temp_upgrade_table" (
|
||||
"id" INTEGER NOT NULL UNIQUE,
|
||||
"discord_username" TEXT NOT NULL UNIQUE,
|
||||
"email" TEXT,
|
||||
"jellyfin_username" TEXT,
|
||||
PRIMARY KEY("id" AUTOINCREMENT)
|
||||
);''')
|
||||
conn.execute(f'''
|
||||
INSERT INTO membarr_temp_upgrade_table(id, discord_username, email)
|
||||
SELECT id, discord_username, email
|
||||
FROM {tablename};
|
||||
''')
|
||||
conn.execute(f'''
|
||||
DROP TABLE {tablename};
|
||||
''')
|
||||
conn.execute(f'''
|
||||
ALTER TABLE membarr_temp_upgrade_table RENAME TO {tablename}
|
||||
''')
|
||||
conn.commit()
|
||||
version = 'Membarr V1.1'
|
||||
|
||||
print('------')
|
||||
|
||||
14
app/bot/helper/textformat.py
Normal file
14
app/bot/helper/textformat.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from multiprocessing import AuthenticationError
|
||||
|
||||
|
||||
class bcolors:
|
||||
HEADER = '\033[95m'
|
||||
OKBLUE = '\033[94m'
|
||||
OKCYAN = '\033[96m'
|
||||
OKGREEN = '\033[92m'
|
||||
WARNING = '\033[93m'
|
||||
FAIL = '\033[91m'
|
||||
ENDC = '\033[0m'
|
||||
BOLD = '\033[1m'
|
||||
UNDERLINE = '\033[4m'
|
||||
AUTHOR = '\033[1;45;96m'
|
||||
3
run.py
3
run.py
@@ -11,14 +11,13 @@ from app.bot.helper.confighelper import MEMBARR_VERSION, switch, Discord_bot_tok
|
||||
import app.bot.helper.confighelper as confighelper
|
||||
import app.bot.helper.jellyfinhelper as jelly
|
||||
from app.bot.helper.message import *
|
||||
|
||||
maxroles = 10
|
||||
|
||||
if switch == 0:
|
||||
print("Missing Config.")
|
||||
sys.exit()
|
||||
|
||||
print(f"V {MEMBARR_VERSION}")
|
||||
|
||||
class Bot(commands.Bot):
|
||||
def __init__(self) -> None:
|
||||
print("Initializing Discord bot")
|
||||
|
||||
Reference in New Issue
Block a user