Clean files, solve some bugs, message log system

This commit is contained in:
louis chauvet 2018-11-03 18:45:08 +01:00
parent 777b113950
commit 686e10e844
7 changed files with 88 additions and 210 deletions

4
.gitignore vendored
View File

@ -112,4 +112,6 @@ foBot_config/*
# Pi file (too big) # Pi file (too big)
modules/pi/pi.txt modules/pi/pi.txt
*.log* *.log*
*.lock

166
Pipfile.lock generated
View File

@ -1,166 +0,0 @@
{
"_meta": {
"hash": {
"sha256": "0a45806745c14c2eb4a5190e94d4093508347d44f685b6b7262259c46b5f7cb5"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.7"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"asn1crypto": {
"hashes": [
"sha256:2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87",
"sha256:9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49"
],
"version": "==0.24.0"
},
"cffi": {
"hashes": [
"sha256:151b7eefd035c56b2b2e1eb9963c90c6302dc15fbd8c1c0a83a163ff2c7d7743",
"sha256:1553d1e99f035ace1c0544050622b7bc963374a00c467edafac50ad7bd276aef",
"sha256:1b0493c091a1898f1136e3f4f991a784437fac3673780ff9de3bcf46c80b6b50",
"sha256:2ba8a45822b7aee805ab49abfe7eec16b90587f7f26df20c71dd89e45a97076f",
"sha256:3bb6bd7266598f318063e584378b8e27c67de998a43362e8fce664c54ee52d30",
"sha256:3c85641778460581c42924384f5e68076d724ceac0f267d66c757f7535069c93",
"sha256:3eb6434197633b7748cea30bf0ba9f66727cdce45117a712b29a443943733257",
"sha256:495c5c2d43bf6cebe0178eb3e88f9c4aa48d8934aa6e3cddb865c058da76756b",
"sha256:4c91af6e967c2015729d3e69c2e51d92f9898c330d6a851bf8f121236f3defd3",
"sha256:57b2533356cb2d8fac1555815929f7f5f14d68ac77b085d2326b571310f34f6e",
"sha256:770f3782b31f50b68627e22f91cb182c48c47c02eb405fd689472aa7b7aa16dc",
"sha256:79f9b6f7c46ae1f8ded75f68cf8ad50e5729ed4d590c74840471fc2823457d04",
"sha256:7a33145e04d44ce95bcd71e522b478d282ad0eafaf34fe1ec5bbd73e662f22b6",
"sha256:857959354ae3a6fa3da6651b966d13b0a8bed6bbc87a0de7b38a549db1d2a359",
"sha256:87f37fe5130574ff76c17cab61e7d2538a16f843bb7bca8ebbc4b12de3078596",
"sha256:95d5251e4b5ca00061f9d9f3d6fe537247e145a8524ae9fd30a2f8fbce993b5b",
"sha256:9d1d3e63a4afdc29bd76ce6aa9d58c771cd1599fbba8cf5057e7860b203710dd",
"sha256:a36c5c154f9d42ec176e6e620cb0dd275744aa1d804786a71ac37dc3661a5e95",
"sha256:a6a5cb8809091ec9ac03edde9304b3ad82ad4466333432b16d78ef40e0cce0d5",
"sha256:ae5e35a2c189d397b91034642cb0eab0e346f776ec2eb44a49a459e6615d6e2e",
"sha256:b0f7d4a3df8f06cf49f9f121bead236e328074de6449866515cea4907bbc63d6",
"sha256:b75110fb114fa366b29a027d0c9be3709579602ae111ff61674d28c93606acca",
"sha256:ba5e697569f84b13640c9e193170e89c13c6244c24400fc57e88724ef610cd31",
"sha256:be2a9b390f77fd7676d80bc3cdc4f8edb940d8c198ed2d8c0be1319018c778e1",
"sha256:ca1bd81f40adc59011f58159e4aa6445fc585a32bb8ac9badf7a2c1aa23822f2",
"sha256:d5d8555d9bfc3f02385c1c37e9f998e2011f0db4f90e250e5bc0c0a85a813085",
"sha256:e55e22ac0a30023426564b1059b035973ec82186ddddbac867078435801c7801",
"sha256:e90f17980e6ab0f3c2f3730e56d1fe9bcba1891eeea58966e89d352492cc74f4",
"sha256:ecbb7b01409e9b782df5ded849c178a0aa7c906cf8c5a67368047daab282b184",
"sha256:ed01918d545a38998bfa5902c7c00e0fee90e957ce036a4000a88e3fe2264917",
"sha256:edabd457cd23a02965166026fd9bfd196f4324fe6032e866d0f3bd0301cd486f",
"sha256:fdf1c1dc5bafc32bc5d08b054f94d659422b05aba244d6be4ddc1c72d9aa70fb"
],
"version": "==1.11.5"
},
"cryptography": {
"hashes": [
"sha256:02602e1672b62e803e08617ec286041cc453e8d43f093a5f4162095506bc0beb",
"sha256:10b48e848e1edb93c1d3b797c83c72b4c387ab0eb4330aaa26da8049a6cbede0",
"sha256:17db09db9d7c5de130023657be42689d1a5f60502a14f6f745f6f65a6b8195c0",
"sha256:227da3a896df1106b1a69b1e319dce218fa04395e8cc78be7e31ca94c21254bc",
"sha256:2cbaa03ac677db6c821dac3f4cdfd1461a32d0615847eedbb0df54bb7802e1f7",
"sha256:31db8febfc768e4b4bd826750a70c79c99ea423f4697d1dab764eb9f9f849519",
"sha256:4a510d268e55e2e067715d728e4ca6cd26a8e9f1f3d174faf88e6f2cb6b6c395",
"sha256:6a88d9004310a198c474d8a822ee96a6dd6c01efe66facdf17cb692512ae5bc0",
"sha256:76936ec70a9b72eb8c58314c38c55a0336a2b36de0c7ee8fb874a4547cadbd39",
"sha256:7e3b4aecc4040928efa8a7cdaf074e868af32c58ffc9bb77e7bf2c1a16783286",
"sha256:8168bcb08403ef144ff1fb880d416f49e2728101d02aaadfe9645883222c0aa5",
"sha256:8229ceb79a1792823d87779959184a1bf95768e9248c93ae9f97c7a2f60376a1",
"sha256:8a19e9f2fe69f6a44a5c156968d9fc8df56d09798d0c6a34ccc373bb186cee86",
"sha256:8d10113ca826a4c29d5b85b2c4e045ffa8bad74fb525ee0eceb1d38d4c70dfd6",
"sha256:be495b8ec5a939a7605274b6e59fbc35e76f5ad814ae010eb679529671c9e119",
"sha256:dc2d3f3b1548f4d11786616cf0f4415e25b0fbecb8a1d2cd8c07568f13fdde38",
"sha256:e4aecdd9d5a3d06c337894c9a6e2961898d3f64fe54ca920a72234a3de0f9cb3",
"sha256:e79ab4485b99eacb2166f3212218dd858258f374855e1568f728462b0e6ee0d9",
"sha256:f995d3667301e1754c57b04e0bae6f0fa9d710697a9f8d6712e8cca02550910f"
],
"version": "==2.3.1"
},
"discord.py": {
"git": "https://github.com/Rapptz/discord.py",
"ref": "00a659c6526b2445162b52eaf970adbd22c6d35d"
},
"fs.dropboxfs": {
"git": "https://github.com/rkhwaja/fs.dropboxfs.git",
"ref": "47268ea33d6cfa91e343cb84d6d7f6d8b44db3f8"
},
"idna": {
"hashes": [
"sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e",
"sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16"
],
"version": "==2.7"
},
"mysql-connector-python": {
"hashes": [
"sha256:35a8f77b90d40cbf5bbb87bcfae02d63ca0383833187142ead963b1ad95ee958",
"sha256:364b97e225ddaab4438850e9c16495dba4c4ab0a995e7ad061bfb66c07489031",
"sha256:605d55f280b3496cf3b12c7c3751e59e69f80cd4515b39c11ee5f79dae13e407",
"sha256:6e90c766b9f144db8af3cac243e3f7b0e5f151ead6af017285d62f841e906b92",
"sha256:874a7443829183351b6f28a6a22796a738278da7d6a2cfa1cffb5bc0ceea04dd",
"sha256:95426961f4caa90960bf71776a1825e7facd9d3754511313d5c72401793addd6",
"sha256:9dee3c249f169363330a9feeb5bf60392778dbcf81f57c5265b8e75e7a4e45d5",
"sha256:a6f045807fb325369ff9520570a007952696889b6f97058b5ec820fb1462ba71",
"sha256:ce817f306eb0db50f424dc8a3f00b57a9bb78c02dcc5beb7014810e3d19356ca",
"sha256:d4ecde5a335697e240062f72ff4bcba1d51d04a8c73ea3ec69c46cde13e13082",
"sha256:e0fcb069f2916994599f2648e4b9d433087ebe8dacf13cf4d0dea4c0149b9723",
"sha256:eab88976e0cfe47a17ab625ea961ca53478788215cd000f31e22c1f3469685b4",
"sha256:f59ed1ff1b7ffb8343fecb02412628245ec802dd7ecce06f6e9b6863170bfbd1",
"sha256:f5f50d9a9e1690f541cb8c86be68dc62d5e5203ca85d8696807ef2df5e1c7fb1",
"sha256:fe895a5db555a5a5f90a195119e042e2275029012a0ca2a1a085d49b7bb954c9"
],
"index": "pypi",
"version": "==8.0.12"
},
"protobuf": {
"hashes": [
"sha256:10394a4d03af7060fa8a6e1cbf38cea44be1467053b0aea5bbfcb4b13c4b88c4",
"sha256:1489b376b0f364bcc6f89519718c057eb191d7ad6f1b395ffd93d1aa45587811",
"sha256:1931d8efce896981fe410c802fd66df14f9f429c32a72dd9cfeeac9815ec6444",
"sha256:196d3a80f93c537f27d2a19a4fafb826fb4c331b0b99110f985119391d170f96",
"sha256:46e34fdcc2b1f2620172d3a4885128705a4e658b9b62355ae5e98f9ea19f42c2",
"sha256:59cd75ded98094d3cf2d79e84cdb38a46e33e7441b2826f3838dcc7c07f82995",
"sha256:5ee0522eed6680bb5bac5b6d738f7b0923b3cafce8c4b1a039a6107f0841d7ed",
"sha256:65917cfd5da9dfc993d5684643063318a2e875f798047911a9dd71ca066641c9",
"sha256:685bc4ec61a50f7360c9fd18e277b65db90105adbf9c79938bd315435e526b90",
"sha256:92e8418976e52201364a3174e40dc31f5fd8c147186d72380cbda54e0464ee19",
"sha256:9335f79d1940dfb9bcaf8ec881fb8ab47d7a2c721fb8b02949aab8bbf8b68625",
"sha256:a7ee3bb6de78185e5411487bef8bc1c59ebd97e47713cba3c460ef44e99b3db9",
"sha256:ceec283da2323e2431c49de58f80e1718986b79be59c266bb0509cbf90ca5b9e",
"sha256:fcfc907746ec22716f05ea96b7f41597dfe1a1c088f861efb8a0d4f4196a6f10"
],
"markers": "python_version != '3.3.*' and python_version != '3.1.*' and python_version != '3.0.*' and python_version != '3.2.*' and python_version >= '2.7'",
"version": "==3.6.1"
},
"pycparser": {
"hashes": [
"sha256:99a8ca03e29851d96616ad0404b4aad7d9ee16f25c9f9708a11faf2810f7b226"
],
"version": "==2.18"
},
"pymysql": {
"hashes": [
"sha256:95f057328357e0e13a30e67857a8c694878b0175797a9a203ee7adbfb9b1ec5f",
"sha256:9ec760cbb251c158c19d6c88c17ca00a8632bac713890e465b2be01fdc30713f"
],
"index": "pypi",
"version": "==0.9.2"
},
"six": {
"hashes": [
"sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
"sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
],
"version": "==1.11.0"
}
},
"develop": {}
}

View File

@ -1 +0,0 @@
worker: python main.py

View File

@ -1,7 +0,0 @@
{
"name": "foBot",
"description": "A simple bot for discord.",
"image": "heroku/python",
"repository": "https://github.com/Fomys/foBot",
"keywords": ["python", "discord", "rewrite"]
}

96
main.py
View File

@ -1,32 +1,18 @@
import datetime
import importlib import importlib
import json import json
import logging import logging
import logging.config import logging.config
import re import re
import sys
import traceback
import discord import discord
import pymysql as mariadb import pymysql as mariadb
import os import os
# Setup database
# db_connection = mariadb.connect(host=os.environ.get('FOBOT_DATABASE_HOST', '127.0.0.1'),
# port=os.environ.get('FOBOT_DATABASE_PORT', 3307),
# user=os.environ['FOBOT_DATABASE_USER'],
# password=os.environ['FOBOT_DATABASE_PASSWORD'],
# db=os.environ.get('FOBOT_DATABASE_NAME', 'fobot'),
# charset='utf8mb4',
# cursorclass=mariadb.cursors.DictCursor)
db_connection = mariadb.connect(host='127.0.0.1',
port=3307,
user='root',
password='sfkr4m37',
db='fobot',
charset='utf8mb4',
cursorclass=mariadb.cursors.DictCursor)
def to_str(entier): def to_str(entier):
return str(entier).replace("1", "a").replace("2", "b").replace("3", "c").replace("4", "d").replace("5", "e") \ return str(entier).replace("1", "a").replace("2", "b").replace("3", "c").replace("4", "d").replace("5", "e") \
@ -79,6 +65,27 @@ warning = log_foBot.warning
error = log_foBot.error error = log_foBot.error
critical = log_foBot.critical critical = log_foBot.critical
# Setup database
db_connection = None
try:
db_connection = mariadb.connect(host=os.environ['FOBOT_DATABASE_HOST'],
port=int(os.environ['FOBOT_DATABASE_PORT']),
user=os.environ['FOBOT_DATABASE_USER'],
password=os.environ['FOBOT_DATABASE_PASSWORD'],
db=os.environ['FOBOT_DATABASE_NAME'],
charset='utf8mb4',
cursorclass=mariadb.cursors.DictCursor)
except KeyError as e:
traceback.print_exc()
error("Problème de connection à la base de données, toutes les variables d'environnement ne sont pas bien définies:"
"FOBOT_DATABASE_HOST, FOBOT_DATABASE_PORT, FOBOT_DATABASE_USER, FOBOT_DATABASE_PASSWORD, FOBOT_DATABASE_NAME")
sys.exit()
except:
traceback.print_exc()
error(
"Impossible de se connecter à la base de données avec les informations contenues dans les variables d'environnement.")
sys.exit()
class Guild: class Guild:
def __init__(self, bot, guild_id): def __init__(self, bot, guild_id):
@ -93,14 +100,22 @@ class Guild:
self.load_config() self.load_config()
self.update_modules() self.update_modules()
self.save_config() self.save_config()
self.create_log()
def create_log(self):
try:
os.mkdir('logs')
os.mkdir(os.path.join("logs", str(self.id)))
except FileExistsError:
pass
def load_config(self): def load_config(self):
with self.bot.database.cursor() as cursor: with self.bot.database.cursor() as cursor:
# Create guild table if it not exists # Create guild table if it not exists
sql_create = """CREATE TABLE IF NOT EXISTS {guild_id}main ( sql_create = """CREATE TABLE IF NOT EXISTS {guild_id}main (
id int(5) NOT NULL AUTO_INCREMENT PRIMARY KEY, id INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(50) NOT NULL, name VARCHAR(50) NOT NULL,
content JSON CHECK (JSON_VALID(content)) content VARCHAR(20000)
);""".format(guild_id=self.id) );""".format(guild_id=self.id)
cursor.execute(sql_create) cursor.execute(sql_create)
# Load config row # Load config row
@ -158,7 +173,36 @@ class Guild:
if not msg.author.bot: if not msg.author.bot:
for module in self.modules: for module in self.modules:
await module.on_message(msg) await module.on_message(msg)
print(msg.guild, msg.content) log_path = os.path.join("logs", str(self.id), str(msg.channel.id)) + ".log"
with open(log_path, 'a') as file:
file.write("::".join(["create",
datetime.datetime.now().strftime("%d/%m/%y %H:%M"),
str(msg.id),
str(msg.author.id),
"attachment=" + str(len(msg.attachments)),
msg.content, ]) + "\n")
return
async def on_message_delete(self, msg):
log_path = os.path.join("logs", str(self.id), str(msg.channel.id)) + ".log"
with open(log_path, 'a') as file:
file.write("::".join(["delete",
datetime.datetime.now().strftime("%d/%m/%y %H:%M"),
str(msg.id),
str(msg.author.id),
"attachment=" + str(len(msg.attachments)),
msg.content, ]) + "\n")
return
async def on_message_edit(self, before, after):
log_path = os.path.join("logs", str(self.id), str(after.channel.id)) + ".log"
with open(log_path, 'a') as file:
file.write("::".join([" edit",
datetime.datetime.now().strftime("%d/%m/%y %H:%M"),
str(before.id),
str(after.author.id),
"attachment=" + str(len(after.attachments)),
after.content, ]) + "\n")
return return
@ -210,6 +254,12 @@ class FoBot(discord.Client):
async def on_message(self, msg): async def on_message(self, msg):
await self.guilds_class[msg.guild.id].on_message(msg) await self.guilds_class[msg.guild.id].on_message(msg)
async def on_message_delete(self, msg):
await self.guilds_class[msg.guild.id].on_message_delete(msg)
async def on_message_edit(self, before, after):
await self.guilds_class[before.guild.id].on_message_edit(before, after)
myBot = FoBot() myBot = FoBot()
myBot.run(os.environ['DISCORD_TOKEN'], max_messages=100000000) myBot.run(os.environ['FOBOT_DISCORD_TOKEN'], max_messages=100000000)

View File

@ -1 +0,0 @@
python-3.7.0

View File

@ -120,8 +120,9 @@ tr = {
"reload_optimizer": { "reload_optimizer": {
"description": "Recharge les quantités deressources nécessaires, réservé aux admins", "description": "Recharge les quantités deressources nécessaires, réservé aux admins",
"example": [ "example": [
("`{prefix}reload_optimizer`", "Recharge les quantités de ressources nécessaires pour faire " (
"les différents items.") "`{prefix}reload_optimizer`", "Recharge les quantités de ressources nécessaires pour faire "
"les différents items.")
] ]
} }
}, },
@ -153,10 +154,10 @@ tr = {
"pi": { "pi": {
"description": "Donne 2000 décimales de pi.", "description": "Donne 2000 décimales de pi.",
"examples": [ "examples": [
("`(prefix}pi`", "Affiche les 2000 premières décimales de pi."), ("`{prefix}pi`", "Affiche les 2000 premières décimales de pi."),
("`{prefix}pi 2000`", "Affiche 2000 décimales de pi à partir de la 2000ème"), ("`{prefix}pi 2000`", "Affiche 2000 décimales de pi à partir de la 2000ème"),
], ],
},"fpi": { }, "fpi": {
"description": "Recherche l'expression régulière dans pi", "description": "Recherche l'expression régulière dans pi",
"examples": [ "examples": [
("`{prefix}fpi 12345`", "Affiche les 10 premières occurences de 12345 dans pi"), ("`{prefix}fpi 12345`", "Affiche les 10 premières occurences de 12345 dans pi"),
@ -173,12 +174,12 @@ tr = {
"sourcecode": { "sourcecode": {
"description": "Donne un lien vers mon code source (il est là comme ca tu a pas retapper la \ "description": "Donne un lien vers mon code source (il est là comme ca tu a pas retapper la \
commande :smile: https://github.com/Fomys/foBot", commande :smile: https://github.com/Fomys/foBot",
"examples":[ "examples": [
("`prefix`sourcecode", "Affiche mon code source") ("`prefix`sourcecode", "Affiche mon code source")
] ]
}, },
}, },
"sourcecode":"Mon code source est disponible sur github: https://github.com/Fomys/foBot", "sourcecode": "Mon code source est disponible sur github: https://github.com/Fomys/foBot",
}, },
"tools": { "tools": {
"description": "Commandes utiles", "description": "Commandes utiles",
@ -221,14 +222,14 @@ commande :smile: https://github.com/Fomys/foBot",
" fois toutes les options ajoutées, utilisez la commande `{prefix}post_survey {id}` da" " fois toutes les options ajoutées, utilisez la commande `{prefix}post_survey {id}` da"
"ns le channel où vous voulez poster le sondage. Le sondage commencera lorsque vous fe" "ns le channel où vous voulez poster le sondage. Le sondage commencera lorsque vous fe"
"rez la commande `{prefix}post_survey {id}`", "rez la commande `{prefix}post_survey {id}`",
"post_survey":{ "post_survey": {
"presentation":"Un nouveau sondage a été créé. Votez pour le choix que vous préférez avec la comman" "presentation": "Un nouveau sondage a été créé. Votez pour le choix que vous préférez avec la comman"
"de `{prefix}vote choix` en remplaçant choix par le numéro de l'option pour laquelle" "de `{prefix}vote choix` en remplaçant choix par le numéro de l'option pour laquelle"
" vous votez. Ce sondage se termine dans {heures} heures. Bon vote!", " vous votez. Ce sondage se termine dans {heures} heures. Bon vote!",
}, },
"vote": "<@{id_auteur}> votre vote a bien été pris en compte", "vote": "<@{id_auteur}> votre vote a bien été pris en compte",
"result": { "result": {
"text":"Voici les résultats pour le sondage" "text": "Voici les résultats pour le sondage"
} }
}, },
}, },