import sqlite3 class BottlePlugin: def __init__(self): self.conn = sqlite3.connect("bottles.db") self.cursor = self.conn.cursor() self.create_table() def create_table(self): self.cursor.execute(""" CREATE TABLE IF NOT EXISTS bottles ( id INTEGER PRIMARY KEY AUTOINCREMENT, message TEXT NOT NULL, sender TEXT NOT NULL, receiver TEXT NOT NULL, status INTEGER DEFAULT 0 ); """) self.cursor.execute(""" CREATE TABLE IF NOT EXISTS comments ( id INTEGER PRIMARY KEY AUTOINCREMENT, bottle_id INTEGER NOT NULL, comment TEXT NOT NULL ); """) self.cursor.execute(""" CREATE TABLE IF NOT EXISTS likes ( id INTEGER PRIMARY KEY AUTOINCREMENT, bottle_id INTEGER NOT NULL, user TEXT NOT NULL ); """) self.conn.commit() def throw_bottle(self, message, sender): self.cursor.execute( "INSERT INTO bottles (message, sender, receiver) VALUES (?, ?, '')", (message, sender), ) self.conn.commit() def pick_bottle(self, receiver): self.cursor.execute( "SELECT id, message, sender FROM bottles WHERE receiver='' OR receiver=? ORDER BY RANDOM() LIMIT 1", (receiver,), ) row = self.cursor.fetchone() if row is None: return None bottle_id, message, sender = row self.cursor.execute( "UPDATE bottles SET receiver=? WHERE id=?", (receiver, bottle_id) ) self.conn.commit() return {"id": bottle_id, "message": message, "sender": sender} def add_comment(self, bottle_id, comment): self.cursor.execute( "INSERT INTO comments (bottle_id, comment) VALUES (?, ?)", (bottle_id, comment), ) self.conn.commit() def get_comments(self, bottle_id): self.cursor.execute( "SELECT comment FROM comments WHERE bottle_id=?", (bottle_id,) ) rows = self.cursor.fetchall() return [row[0] for row in rows] def like_bottle(self, bottle_id, user): self.cursor.execute( "INSERT INTO likes (bottle_id, user) VALUES (?, ?)", (bottle_id, user) ) self.conn.commit() def get_likes(self, bottle_id): self.cursor.execute("SELECT user FROM likes WHERE bottle_id=?", (bottle_id,)) rows = self.cursor.fetchall() return [row[0] for row in rows] def clear_bottles(self): self.cursor.execute("DELETE FROM bottles") self.cursor.execute("DELETE FROM comments") self.cursor.execute("DELETE FROM likes") self.conn.commit() plugin = BottlePlugin() # 扔一个漂流瓶 plugin.throw_bottle("Hello, world!", "Alice") # 捡一个漂流瓶 bottle = plugin.pick_bottle("Bob") if bottle is not None: print(bottle) # 添加评论 plugin.add_comment(1, "Nice message!") comments = plugin.get_comments(1) print(comments) # 点赞 plugin.like_bottle(1, "Charlie") likes = plugin.get_likes(1) print(likes) # 清空漂流瓶 # plugin.clear_bottles()