Spaces:
Sleeping
Sleeping
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() | |