Initial Release of IGNCore version 2.5

This commit is contained in:
2021-08-09 13:18:56 +02:00
commit a83d98c47e
910 changed files with 224171 additions and 0 deletions
@@ -0,0 +1,72 @@
import random
import time
from core.command_param_types import Const, Int, Any
from core.db import DB
from core.decorators import instance, command
from core.text import Text
@instance()
class QuoteController:
def inject(self, registry):
self.db: DB = registry.get_instance("db")
self.text: Text = registry.get_instance("text")
def start(self):
self.db.exec("CREATE TABLE IF NOT EXISTS quote ("
"id INT PRIMARY KEY AUTO_INCREMENT, "
"char_id INT NOT NULL, "
"created_at INT NOT NULL, "
"content VARCHAR(4096) NOT NULL)")
@command(command="quote", params=[], access_level="all",
description="Show a random quote")
def quote_command(self, request):
quote = self.get_quote_info()
if quote:
return quote
else:
return "There are no quotes to display."
@command(command="quote", params=[Int("quote_id")], access_level="all",
description="Show a specific quote")
def quote_view_command(self, _, quote_id):
quote = self.get_quote_info(quote_id)
if quote:
return quote
else:
return f"Could not find quote with ID <highlight>{quote_id:d}</highlight>."
@command(command="quote", params=[Const("add"), Any("quote")], access_level="all",
description="Show a specific quote")
def quote_add_command(self, request, _, quote):
if len(quote) > 4096:
return "Your quote must be less than 4096 characters."
self.db.exec("INSERT INTO quote (char_id, created_at, content) "
"VALUES (?, ?, ?)",
[request.sender.char_id, int(time.time()), quote])
return "Your quote has been added successfully."
def get_quote_info(self, quote_id=None):
stats = self.db.query_single("SELECT COUNT(1) AS count, MAX(id) AS max FROM quote")
if stats.count == 0:
return None
if not quote_id:
row = self.db.query_single("SELECT q.*, p.name FROM quote q "
"LEFT JOIN player p ON q.char_id = p.char_id "
"LIMIT 1 OFFSET ?",
[random.randint(0, stats.count - 1)])
else:
row = self.db.query_single("SELECT q.*, p.name FROM quote q "
"LEFT JOIN player p ON q.char_id = p.char_id "
"WHERE id = ?",
[quote_id])
return f"{row.id:d}. {row.content}"