.
This commit is contained in:
parent
2995a1fcbf
commit
5d86bf140c
3 changed files with 56 additions and 87 deletions
76
supportbot/__main__.py
Executable file
76
supportbot/__main__.py
Executable file
|
@ -0,0 +1,76 @@
|
|||
#!/usr/bin/env python3
|
||||
import logging
|
||||
import yaml
|
||||
import threading
|
||||
import sys
|
||||
import os
|
||||
import shelve
|
||||
import getopt
|
||||
from pickle import Unpickler
|
||||
|
||||
from . import bot
|
||||
|
||||
def start_new_thread(func, join=False, args=(), kwargs=None):
|
||||
t = threading.Thread(target=func, args=args, kwargs=kwargs)
|
||||
if not join:
|
||||
t.daemon = True
|
||||
t.start()
|
||||
if join:
|
||||
t.join()
|
||||
|
||||
def usage():
|
||||
print("Usage: %s [-q|-d] [-c file]" % sys.argv[0])
|
||||
print("Options:")
|
||||
print(" -h Display this text")
|
||||
print(" -q Quiet, set log level to WARNING")
|
||||
print(" -c Location of config file (default: ./config.yaml)")
|
||||
|
||||
# well this is just dumb
|
||||
class RenamingUnpickler(Unpickler):
|
||||
def find_class(self, module, name):
|
||||
if module == "src.core":
|
||||
module = "supportbot.bot"
|
||||
return super().find_class(module, name)
|
||||
|
||||
def main(configpath, loglevel=logging.INFO):
|
||||
with open(configpath, "r") as f:
|
||||
config = yaml.safe_load(f)
|
||||
|
||||
logging.basicConfig(format="%(levelname)-7s [%(asctime)s] %(message)s", datefmt="%Y-%m-%d %H:%M:%S", level=loglevel)
|
||||
|
||||
shelve.Unpickler = RenamingUnpickler
|
||||
db = shelve.open(config["database"])
|
||||
|
||||
bot.init(config, db)
|
||||
|
||||
try:
|
||||
start_new_thread(bot.run, join=True)
|
||||
except KeyboardInterrupt:
|
||||
logging.info("Interrupted, exiting")
|
||||
db.close()
|
||||
os._exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], "hqc:", ["help"])
|
||||
except getopt.GetoptError as e:
|
||||
print(str(e))
|
||||
exit(1)
|
||||
|
||||
# Process command line args
|
||||
def readopt(name):
|
||||
for e in opts:
|
||||
if e[0] == name:
|
||||
return e[1]
|
||||
if readopt("-h") is not None or readopt("--help") is not None:
|
||||
usage()
|
||||
exit(0)
|
||||
loglevel = logging.INFO
|
||||
if readopt("-q") is not None:
|
||||
loglevel = logging.WARNING
|
||||
configpath = "./config.yaml"
|
||||
if readopt("-c") is not None:
|
||||
configpath = readopt("-c")
|
||||
|
||||
# Run the actual program
|
||||
main(configpath, loglevel)
|
Loading…
Add table
Add a link
Reference in a new issue