diff --git a/.gitignore b/.gitignore index 068812e..65e2f8a 100644 --- a/.gitignore +++ b/.gitignore @@ -160,5 +160,10 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ +<<<<<<< HEAD config/* db/* +======= +config/ +db/ +>>>>>>> for_psql diff --git a/dislocker.py b/dislocker.py index e946aec..2052636 100644 --- a/dislocker.py +++ b/dislocker.py @@ -1,24 +1,14 @@ import json import discord import os +<<<<<<< HEAD import sqlite3 +======= +import psycopg2 +import datetime +>>>>>>> for_psql -class Bot(discord.Client): - async def on_ready(self): - print("ログイン成功") - - async def on_message(self, message): - if message.author.bot: - return - - if message.content == "/hello": - await message.channel.send("こんにちは!!!!") - - if message.content == "/password": - await message.channel.send("gjhioragiopwjhgiopweap") - - -class Cert(): +class Database(): def __init__(self): if not os.path.isfile("./db/dislocker.db"): initial = 1 @@ -55,23 +45,117 @@ class Cert(): elif result[0][1] == username and result[0][2] == password: return 0 +<<<<<<< HEAD cert = Cert() +======= +class Bot(discord.Client): + def db_connect(self, host, db, user, password): + self.db = psycopg2.connect(f"host={host} dbname={db} user={user} password={password}") -bot_config_path = "./config/bot.json" + async def on_ready(self): + print("ログイン成功") + + async def on_message(self, message): + if message.author.bot: + return + + if isinstance(message.channel, discord.DMChannel): + user_id = message.author.id + user_name = message.author.name + msg_split = message.content.split() + if msg_split[0] == "/password": + if len(msg_split) <= 2: + await message.channel.send("PC番号、もしくはデバイス番号が入力されていません。") + + elif len(msg_split) == 3: + if msg_split[1].isdigit() and msg_split[2].isdigit(): + if int(msg_split[1]) <= 10 and int(msg_split[1]) >= 1: + cursor = self.db.cursor() + cursor.execute("SELECT * FROM club_member WHERE discord_userid = %s", (str(message.author.id),)) + member_info = cursor.fetchall() + cursor.execute("INSERT INTO pc_usage_history ( member_id, pc_number, device_number, start_use_time ) VALUES ( %s, %s, %s, current_timestamp)", (member_info[0][0], int(msg_split[1]), int(msg_split[2]))) + self.db.commit() + await message.channel.send(f"使用が開始されました。\nPC番号 | {msg_split[1]}\nデバイス番号 | {msg_split[2]}\n") + else: + await message.channel.send("パソコンの台数が\n# だめです") + else: + await message.channel.send("構文が不正です。") +>>>>>>> for_psql + + elif len(msg_split) >= 4: + if msg_split[1].isdigit() and msg_split[2].isdigit(): + if int(msg_split[1]) <= 10 and int(msg_split[1]) >= 1: + cursor = self.db.cursor() + cursor.execute("SELECT * FROM club_member WHERE discord_userid = %s", (str(message.author.id),)) + member_info = cursor.fetchall() + cursor.execute("INSERT INTO pc_usage_history ( member_id, pc_number, device_number, start_use_time, use_detail ) VALUES ( %s, %s, %s, current_timestamp, %s)", (member_info[0][0], int(msg_split[1]), int(msg_split[2]), str(msg_split[3]))) + self.db.commit() + await message.channel.send(f"使用が開始されました。\nPC番号 | {msg_split[1]}\nデバイス番号 | {msg_split[2]}\n") + else: + await message.channel.send("パソコンの台数が\n# だめです") + else: + await message.channel.send("構文が不正です。") + + + elif msg_split[0] == "/stop": + cursor = self.db.cursor() + cursor.execute("SELECT * FROM club_member WHERE discord_userid = %s", (str(message.author.id),)) + member_info = cursor.fetchall() + cursor.execute("SELECT * FROM pc_usage_history WHERE member_id=%s ORDER BY id DESC LIMIT 1", (member_info[0][0],)) + history_info = cursor.fetchall() + cursor.execute("UPDATE pc_usage_history SET end_use_time = current_timestamp WHERE id = %s", (history_info[0][0],)) + self.db.commit() + + await message.channel.send(f"使用が終了されました。") + + else: + + if message.content == "/hello": + await message.channel.send("こんにちは!!!!") + + else: + await message.channel.send("どうしましたか?") + +#cert = Cert() + +config_dir_path = "./config/" +db_config_path = config_dir_path + "db.json" +if not os.path.isfile(db_config_path): + if not os.path.isdir(config_dir_path): + os.mkdir(config_dir_path) + + db_config = { + "host": "localhost", + "db": "dislocker", + "username": "user", + "password": "example_pass", + "port": "5432" + } + with open(db_config_path, "w") as w: + json.dump(db_config, w, indent=4) +elif os.path.isfile(db_config_path): + with open(db_config_path, "r") as r: + db_config = json.load(r) + +bot_config_path = config_dir_path + "bot.json" if not os.path.isfile(bot_config_path): + if not os.path.isdir(config_dir_path): + os.mkdir(config_dir_path) + bot_config = { - "token": "" + "token": "TYPE HERE BOTS TOKEN KEY" } with open(bot_config_path, "w") as w: json.dump(bot_config, w, indent=4) elif os.path.isfile(bot_config_path): - with open("./config/bot.json", "r") as r: + with open(bot_config_path, "r") as r: bot_config = json.load(r) intents = discord.Intents.default() intents.message_content = True bot = Bot(intents=intents) +bot.db_connect(db_config["host"], db_config["db"], db_config["username"], db_config["password"]) bot.run(bot_config["token"]) \ No newline at end of file diff --git a/docs/データベースセットアップ.txt b/docs/データベースセットアップ.txt index d719e70..14d8667 100644 --- a/docs/データベースセットアップ.txt +++ b/docs/データベースセットアップ.txt @@ -1,13 +1,8 @@ # ログイン psql -U suti7 -d dislocker -CREATE TABLE user -(user_id INTEGER PRIMARY KEY NOT NULL, -discord_id INTEGER NOT NULL, -discord_username VARCHAR(32) NOT NULL, -PRIMARY KEY (user_id)); +CREATE TABLE club_member (id SERIAL NOT NULL, name VARCHAR(30) NOT NULL, discord_username VARCHAR(32) NOT NULL, discord_userid VARCHAR(18) NOT NULL, PRIMARY KEY (id)); +CREATE TABLE pc_usage_history (id SERIAL NOT NULL, member_id INTEGER NOT NULL, pc_number INTEGER NOT NULL, device_number INTEGER NOT NULL, start_use_time TIMESTAMP NOT NULL, end_use_time TIMESTAMP, use_detail VARCHAR(30), PRIMARY KEY (id), FOREIGN KEY (memb +er_id) REFERENCES club_member(id)); -CREATE TABLE user_list (user_id INTEGER NOT NULL, discord_username VARCHAR(32) NOT NULL, discord_userid INTEGER NOT NULL, PRIMARY KEY (user_id)); - -# テーブルを作る -CREATE TABLE web_auth (id SERIAL, username VARCHAR(10) NOT NULL, password VARCHAR(32) NOT NULL, PRIMARY KEY(id)); \ No newline at end of file +INSERTのとき文字列はシングルクォーテーションで囲む!!! \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..bb96364 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +discord.py +flask +flask-login +psycopg2 \ No newline at end of file