testbottt / db_connection.py
Sabareeshr's picture
Upload 6 files
adc818e verified
import sqlite3
from UserStatus import UserStatus
def create_db():
# Connect to the chatbot database
conn = sqlite3.connect('chatbot_database.db')
c = conn.cursor()
# Create the users table if it does not exist (user_id, status, partner_id)
c.execute("CREATE TABLE IF NOT EXISTS users (user_id TEXT PRIMARY KEY, status TEXT, partner_id TEXT)")
conn.commit()
conn.close()
def insert_user(user_id):
# Connect to the chatbot database
conn = sqlite3.connect('chatbot_database.db')
c = conn.cursor()
# Check if the user is already in the users table
c.execute("SELECT * FROM users WHERE user_id=?", (user_id,))
if c.fetchone():
# If the user is already in the users table, do nothing
conn.close()
return
# Otherwise, insert the user into the users table
c.execute("INSERT INTO users VALUES (?, ?, ?)", (user_id, UserStatus.IDLE, None)) # No partner_id initially
conn.commit()
conn.close()
def remove_user(user_id):
# If a user disconnects, remove him/her from the users table
conn = sqlite3.connect('chatbot_database.db') # Connect to the chatbot database
c = conn.cursor()
# Check if the user had a partner
partner_id = get_partner_id(user_id)
if partner_id:
# If the user had a partner, remove the user from the partner's row
c.execute("UPDATE users SET partner_id=NULL WHERE user_id=?", (partner_id,))
# Update the partner's status to UserStatus.PARTNER_LEFT
set_user_status(partner_id, UserStatus.PARTNER_LEFT)
else:
# Simply remove the user from the users table
c.execute("DELETE FROM users WHERE user_id=?", (user_id,))
conn.commit()
conn.close()
def get_user_status(user_id):
# Connect to the chatbot database
conn = sqlite3.connect('chatbot_database.db')
c = conn.cursor()
# Get the status of the user
c.execute("SELECT status FROM users WHERE user_id=?", (user_id,))
status = c.fetchone()[0]
conn.close()
return status
def set_user_status(user_id, new_status):
# Connect to the chatbot database
conn = sqlite3.connect('chatbot_database.db')
c = conn.cursor()
# Set the status of the user
c.execute("UPDATE users SET status=? WHERE user_id=?", (new_status, user_id))
conn.commit()
conn.close()
def get_partner_id(user_id):
# Connect to the chatbot database
conn = sqlite3.connect('chatbot_database.db')
c = conn.cursor()
# If the user is a guest, then search for the host
c.execute("SELECT user_id FROM users WHERE partner_id=?", (user_id,))
other_user_id = c.fetchone()
if not other_user_id:
# If no user is found, return None
conn.close()
return None
# otherwise, return the other user's id
other_user_id = other_user_id[0]
conn.close()
return other_user_id
def couple(current_user_id):
# Connect to the chatbot database
conn = sqlite3.connect('chatbot_database.db')
c = conn.cursor()
# If the user is not the current one and is in search, then couple them
c.execute("SELECT user_id FROM users WHERE status=? AND user_id!=?", (UserStatus.IN_SEARCH, current_user_id,))
# Verify if another user in search is found
other_user_id = c.fetchone()
if not other_user_id:
# If no user is found, return None
return None
# If another user in search is found, couple the users
other_user_id = other_user_id[0]
# Update both users' partner_id to reflect the coupling
c.execute("UPDATE users SET partner_id=? WHERE user_id=?", (other_user_id, current_user_id))
c.execute("UPDATE users SET partner_id=? WHERE user_id=?", (current_user_id, other_user_id))
# Update both users' status to UserStatus.COUPLED
c.execute("UPDATE users SET status=? WHERE user_id=?", (UserStatus.COUPLED, current_user_id))
c.execute("UPDATE users SET status=? WHERE user_id=?", (UserStatus.COUPLED, other_user_id))
conn.commit()
conn.close()
return other_user_id
def uncouple(user_id):
# Connect to the chatbot database
conn = sqlite3.connect('chatbot_database.db')
c = conn.cursor()
# Retrieve the partner_id of the user
partner_id = get_partner_id(user_id)
if not partner_id:
# If the user is not coupled, return None
return None
# Update both users' partner_id to reflect the uncoupling
c.execute("UPDATE users SET partner_id=NULL WHERE user_id=?", (user_id,))
c.execute("UPDATE users SET partner_id=NULL WHERE user_id=?", (partner_id,))
# Update both users' status to UserStatus.IDLE
c.execute("UPDATE users SET status=? WHERE user_id=?", (UserStatus.IDLE, user_id))
c.execute("UPDATE users SET status=? WHERE user_id=?", (UserStatus.IDLE, partner_id))
conn.commit()
conn.close()
return
def retrieve_users_number():
# Connect to the chatbot database
conn = sqlite3.connect('chatbot_database.db')
c = conn.cursor()
# Retrieve the number of users in the users table
c.execute("SELECT COUNT(*) FROM users")
total_users_number = c.fetchone()[0]
# Retrieve the number of users who are currently coupled
c.execute("SELECT COUNT(*) FROM users WHERE status='coupled'")
paired_users_number = c.fetchone()[0]
conn.close()
return total_users_number, paired_users_number
def reset_users_status():
# Connect to the chatbot database
conn = sqlite3.connect('chatbot_database.db')
c = conn.cursor()
# Reset the status of all users to UserStatus.IDLE
c.execute("UPDATE users SET status=?", (UserStatus.IDLE,))
conn.commit()
conn.close()