Major update to UI and bot code. Added config file.

It is now modular and can be used on any machine.

Still TODO-
- 420 Timer
- SDR built into bot
This commit is contained in:
Logan Cusano
2021-12-04 02:42:47 -05:00
parent 91d79928cc
commit c1be9d5cbf
3 changed files with 216 additions and 48 deletions

156
main.py Normal file
View File

@@ -0,0 +1,156 @@
import configparser
import signal
import sys
import os
import time
import bot
import sound
from os.path import exists
# Jorn
#token = 'OTE1MDY0OTk2OTk0NjMzNzI5.YaWKsA.Y9yaCGg_VXRL_qQVbs05vo7gSAc'
# Greada
#token = 'NzU2MzI3MjcxNTk3NDczODYz.X2QOqQ.LVLj2b-RXQzPmhNuBC1eGFMcYls'
#name = "VoiceMeeter Output"
class BotDeviceNotFound(Exception):
def __init__(self, device):
print(f"Unable to find the device: {device}")
try:
os.remove('./config.ini')
except OSError:
print("Config file not found, restarting.")
#os.execv(__file__, sys.argv)
def check_if_config_exists():
if exists('./config.ini'):
return True
else:
return False
def read_config_file():
config = configparser.ConfigParser()
config.read('./config.ini')
config_return = {
'Bot Token': config['Bot_Info']['Token'],
'Device ID': int(config['Device']['ID']),
'Device Name': str(config['Device']['Name'])
}
return config_return
def write_config_file(token='', device_id=0, device_name=''):
config = configparser.ConfigParser()
config.add_section('Bot_Info')
config.add_section('Device')
if token == '' and device_id == 0:
device_id, device_name = get_user_device_selection()
print(device_id)
print(device_name)
token = get_user_token()
config['Bot_Info']['Token'] = token
config['Device']['ID'] = str(device_id)
config['Device']['Name'] = str(device_name)
with open('./config.ini', 'w') as config_file:
config.write(config_file)
return True
def get_device_list():
return sound.query_devices().items()
def get_user_device_selection():
device_list = get_device_list()
org_device_list = []
for device, dev_id in device_list:
print(f"{dev_id + 1}\t-\t{device}")
org_device_list.append((dev_id, device))
selected_id = None
while not selected_id:
try:
selected_id = int(input(f"Please select the input device from above:\t")) - 1
except Exception as e:
print(e)
continue
if selected_id and not selected_id + 1 > int(len(device_list)):
continue
elif selected_id > int(len(device_list)):
print("Out of range, try again...")
selected_id = None
continue
else:
selected_id = None
print("Internal error, try again")
continue
for dev_dict in org_device_list:
if dev_dict[0] == selected_id:
selected_id = dev_dict
return selected_id
def get_user_token():
token = None
while not token:
token = str(input(f"Please enter your Discord bot API token now:\t"))
if len(token) == 59:
return token
else:
print('Length error in token, please try again...')
continue
def main():
print('Checking config file...')
if not check_if_config_exists():
print("No config file exists, please enter this information now")
write_config_file()
config = read_config_file()
print('Starting Bot...')
discord_bot_client = bot.Bot(config['Bot Token'], config['Device ID'], config['Device Name'])
print(f"Verifying audio device:\t{config['Device Name']}")
if not discord_bot_client.check_device():
raise BotDeviceNotFound(config['Device Name'])
print("Bot started!")
discord_bot_client.start_bot()
if __name__ == '__main__':
#main()
#atexit.register()
try:
print('Starting...')
while True:
try:
main()
except BotDeviceNotFound:
print("Restarting...")
time.sleep(2)
except KeyboardInterrupt:
print("Exiting...")