141 lines
4.6 KiB
Python
141 lines
4.6 KiB
Python
import logging
|
|
import os
|
|
import time
|
|
import bot
|
|
import argparse
|
|
import BotResources
|
|
|
|
# Jorn
|
|
#token = 'OTE1MDY0OTk2OTk0NjMzNzI5.YaWKsA.Y9yaCGg_VXRL_qQVbs05vo7gSAc'
|
|
|
|
# Greada
|
|
#token = 'NzU2MzI3MjcxNTk3NDczODYz.X2QOqQ.LVLj2b-RXQzPmhNuBC1eGFMcYls'
|
|
|
|
# Brent
|
|
#token = OTQzNzQyMDQwMjU1MTE1MzA0.Yg3eRA.ZxEbRr55xahjfaUmPY8pmS-RHTY
|
|
|
|
#name = "VoiceMeeter Output"
|
|
|
|
LOGGER = logging.getLogger("Discord_Radio_Bot.Main")
|
|
|
|
|
|
class BotDeviceNotFound(Exception):
|
|
def __init__(self, device):
|
|
LOGGER.debug(f"Unable to find the device: {device}")
|
|
try:
|
|
os.remove('./config.ini')
|
|
except OSError:
|
|
LOGGER.warning("Config file not found, restarting.")
|
|
#os.execv(__file__, sys.argv)
|
|
|
|
|
|
def main(**passed_config):
|
|
# Don't create a config if the user passed parameters
|
|
if len(passed_config.keys()) == 0:
|
|
LOGGER.info('Checking config file...')
|
|
if not BotResources.check_if_config_exists():
|
|
LOGGER.warning("No config file exists, please enter this information now")
|
|
BotResources.write_config_file(init=True)
|
|
|
|
config = BotResources.read_config_file()
|
|
|
|
if not config:
|
|
LOGGER.warning("No config file exists, please enter this information now")
|
|
BotResources.write_config_file(init=True)
|
|
config = BotResources.read_config_file()
|
|
|
|
# Overwrite config options if they were passed
|
|
if len(passed_config.keys()) == 0:
|
|
for sub in config:
|
|
# checking if key present in other dictionary
|
|
if sub in passed_config and passed_config[sub]:
|
|
config[sub] = passed_config[sub]
|
|
|
|
LOGGER.info('Starting Bot...')
|
|
|
|
discord_bot_client = bot.Bot(Token=config['Bot Token'], Device_ID=config['Device ID'],
|
|
Device_Name=config['Device Name'], Mention_Group=config['Mention Group'],
|
|
Channel_ID=config['Channel ID'], Handler=config['Handler'])
|
|
|
|
LOGGER.debug(f"Verifying audio device:\t{config['Device Name']}")
|
|
|
|
if not discord_bot_client.check_device(_override=bool("Device ID" in passed_config.keys())):
|
|
raise BotDeviceNotFound(config['Device Name'])
|
|
|
|
discord_bot_client.start_bot()
|
|
|
|
|
|
def cmd_arguments():
|
|
parser = argparse.ArgumentParser(description='Discord Bot Gang - Premium Discord Bot\n'
|
|
'The more you listen, the less you can see')
|
|
# Add the arguments
|
|
|
|
# Arg to override bot token
|
|
parser.add_argument('-t', '--token',
|
|
metavar='Bot Token',
|
|
dest='Bot Token',
|
|
type=str,
|
|
help='Override saved bot token')
|
|
|
|
# Arg to override the input device in the config
|
|
parser.add_argument('-i', '--input_device_id',
|
|
metavar='Device ID',
|
|
dest='Device ID',
|
|
type=int,
|
|
help='Override saved input device')
|
|
|
|
# Arg to override mention group
|
|
parser.add_argument('-m', '--mention',
|
|
metavar='Mention Group',
|
|
dest='Mention Group',
|
|
type=str,
|
|
help='Override saved mention group')
|
|
|
|
# Arg to override default channel to send messages
|
|
parser.add_argument('-c', '--channel',
|
|
metavar='Channel ID',
|
|
dest='Channel ID',
|
|
type=int,
|
|
help='Override saved sending channel')
|
|
|
|
# Arg to override handler
|
|
parser.add_argument('-u', '--handler',
|
|
metavar='Handler',
|
|
dest='Handler',
|
|
type=str,
|
|
help='Override saved SDR handler')
|
|
|
|
# Arg to save the overridden arguments
|
|
#parser.add_argument('-s', '--save',
|
|
# metavar='save_overrides',
|
|
# dest='save_overrides',
|
|
# type=str,
|
|
# help='Save the overridden arguments passed')
|
|
|
|
# Retrieve the args
|
|
args = vars(parser.parse_args())
|
|
|
|
return args
|
|
|
|
|
|
if __name__ == '__main__':
|
|
cmd_args = cmd_arguments()
|
|
BotResources.init_global_logger()
|
|
|
|
if not all(cmd_args.values()):
|
|
LOGGER.debug("Passed arguments:")
|
|
for arg in cmd_args:
|
|
if cmd_args[arg]:
|
|
LOGGER.debug(f"\t{arg}:\t{cmd_args[arg]}")
|
|
|
|
try:
|
|
LOGGER.info('Starting...')
|
|
while True:
|
|
try:
|
|
main(**cmd_args)
|
|
except BotDeviceNotFound:
|
|
LOGGER.info("Restarting...")
|
|
time.sleep(2)
|
|
except KeyboardInterrupt:
|
|
LOGGER.error("Exiting...")
|