INIT project.
commit
27e0fafcb7
@ -0,0 +1,11 @@
|
|||||||
|
########################
|
||||||
|
# ENVIRONMENT TEMPLATE #
|
||||||
|
########################
|
||||||
|
|
||||||
|
export DISCORD_BOT_TOKEN=<>
|
||||||
|
export MYSQL_HOST=<>
|
||||||
|
export MYSQL_PORT=<>
|
||||||
|
export MYSQL_DATABASE=<>
|
||||||
|
export MYSQL_USER=<>
|
||||||
|
export MYSQL_PASSWORD=<>
|
||||||
|
export LOGLEVEL=<>
|
@ -0,0 +1,30 @@
|
|||||||
|
"""
|
||||||
|
Bot management.
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
from argparse import ArgumentParser
|
||||||
|
|
||||||
|
from settings.config import DISCORD_BOT_TOKEN
|
||||||
|
from utils.commands import client
|
||||||
|
from utils.database import DataBase
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
manage = ArgumentParser(
|
||||||
|
description='Neeble discord bot.'
|
||||||
|
)
|
||||||
|
manage.add_argument(
|
||||||
|
'command',
|
||||||
|
type=str,
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
command = manage.parse_args()
|
||||||
|
|
||||||
|
if command.command == 'run':
|
||||||
|
try:
|
||||||
|
client.run(DISCORD_BOT_TOKEN)
|
||||||
|
except Exception as ex:
|
||||||
|
logger.error(ex.args[0])
|
||||||
|
elif command.command == 'migrate':
|
||||||
|
DataBase.migrate()
|
@ -0,0 +1,2 @@
|
|||||||
|
discord.py==1.7.3
|
||||||
|
mysqlclient==2.1.1
|
@ -0,0 +1,60 @@
|
|||||||
|
"""
|
||||||
|
BOT configuration.
|
||||||
|
"""
|
||||||
|
import logging.config as logger
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Discord token.
|
||||||
|
DISCORD_BOT_TOKEN = os.environ.get('DISCORD_BOT_TOKEN')
|
||||||
|
|
||||||
|
# Mysql configuration.
|
||||||
|
MYSQL_CONFIG = {
|
||||||
|
'host': os.environ.get('MYSQL_HOST', 'localhost'),
|
||||||
|
'port': int(os.environ.get('MYSQL_PORT', '3306')),
|
||||||
|
'db': os.environ.get('MYSQL_DATABASE', 'neeble'),
|
||||||
|
'user': os.environ.get('MYSQL_USER', 'neeble'),
|
||||||
|
'password': os.environ.get('MYSQL_PASSWORD', 'neeble'),
|
||||||
|
}
|
||||||
|
|
||||||
|
# Define the log level
|
||||||
|
LOGLEVEL = os.environ.get('LOGLEVEL', 'info').upper()
|
||||||
|
|
||||||
|
# Configuração do logging.
|
||||||
|
LOGGING_CONFIG = {
|
||||||
|
'version': 1,
|
||||||
|
'disable_existing_loggers': False,
|
||||||
|
'formatters': {
|
||||||
|
'default': {
|
||||||
|
'format': '[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'handlers': {
|
||||||
|
'console': {
|
||||||
|
'level': LOGLEVEL,
|
||||||
|
'class': 'logging.StreamHandler',
|
||||||
|
'formatter': 'default',
|
||||||
|
},
|
||||||
|
'logfile': {
|
||||||
|
'level': LOGLEVEL,
|
||||||
|
'class': 'logging.handlers.RotatingFileHandler',
|
||||||
|
'filename': '/tmp/neeble.log',
|
||||||
|
'maxBytes': 50000,
|
||||||
|
'backupCount': 9,
|
||||||
|
'formatter': 'default',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'loggers': {
|
||||||
|
'': {
|
||||||
|
'level': LOGLEVEL,
|
||||||
|
'handlers': ['console', 'logfile'],
|
||||||
|
'propagate': False,
|
||||||
|
},
|
||||||
|
'neeble': {
|
||||||
|
'level': LOGLEVEL,
|
||||||
|
'handlers': ['console', 'logfile'],
|
||||||
|
'propagate': False,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.dictConfig(LOGGING_CONFIG)
|
@ -0,0 +1,7 @@
|
|||||||
|
"""
|
||||||
|
Bot commands.
|
||||||
|
"""
|
||||||
|
import discord
|
||||||
|
from discord.ext import commands
|
||||||
|
|
||||||
|
client = commands.Bot(command_prefix='~')
|
@ -0,0 +1,58 @@
|
|||||||
|
"""
|
||||||
|
Database utils module.
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
import MySQLdb
|
||||||
|
from settings.config import MYSQL_CONFIG
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class Cursor:
|
||||||
|
"""
|
||||||
|
Context manage for database handler.
|
||||||
|
"""
|
||||||
|
def __init__(self, config: dict) -> None:
|
||||||
|
"""
|
||||||
|
Constructor.
|
||||||
|
"""
|
||||||
|
self.configuration = config
|
||||||
|
|
||||||
|
def __enter__(self) -> 'cursor':
|
||||||
|
"""
|
||||||
|
Context manager.
|
||||||
|
"""
|
||||||
|
self.conn = MySQLdb.connect(**self.configuration, charset='utf-8')
|
||||||
|
self.cursor = self.conn.cursor()
|
||||||
|
|
||||||
|
return self.cursor
|
||||||
|
|
||||||
|
def __exit__(self, exc_type, exc_value, exc_trace) -> None:
|
||||||
|
"""
|
||||||
|
Exit from context manager.
|
||||||
|
"""
|
||||||
|
self.conn.commit()
|
||||||
|
self.cursor.close()
|
||||||
|
self.conn.close()
|
||||||
|
|
||||||
|
|
||||||
|
class DataBase:
|
||||||
|
"""
|
||||||
|
Database handler.
|
||||||
|
"""
|
||||||
|
@staticmethod
|
||||||
|
def migrate() -> None:
|
||||||
|
"""
|
||||||
|
Create tables.
|
||||||
|
"""
|
||||||
|
_sql = '''
|
||||||
|
create if not exists neeble_quotes(
|
||||||
|
user varchar(200) not null,
|
||||||
|
quote varchar(1000) not null unique
|
||||||
|
);
|
||||||
|
'''
|
||||||
|
try:
|
||||||
|
with Cursor(MYSQL_CONFIG) as cursor:
|
||||||
|
cursor.execute(_sql)
|
||||||
|
except Exception as ex:
|
||||||
|
logger.error(ex.args[0])
|
Loading…
Reference in New Issue