summaryrefslogtreecommitdiffstats
path: root/games.py
blob: d1b666beaf4af015039aa8e242d3ca45036752ca (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import db

CATEGORY = "game"


def init_db():
    db.init_db()
    db.seed(CATEGORY)


def _format(row) -> str:
    note_line = f"\n- {row['note']}" if row['note'].strip() else ""
    return f"{row['name']}{note_line}\nAdded by {row['added_by']}"


HELP_TEXT = (
    "🎮 Game bot commands:\n"
    "  !addgame <name> [| <note>]  — add a new game (names must be unique, note is optional)\n"
    "  !removegame <name>        — remove a game by name\n"
    "  !findgame [keyword]       — get a random game (optionally filtered by keyword in note)"
)


async def handle_game_command(bot_api, room_id: str, sender: str, body: str, self_name: str):
    stripped = body.strip()
    lower = stripped.lower()

    # Passive trigger: any message containing "what to play"
    if "what to play" in lower and not lower.startswith("!"):
        after = lower.split("what to play", 1)[1].strip()
        if after.isdigit():
            index = int(after)
            total = db.count_items(CATEGORY)
            pick = db.get_item_by_index(CATEGORY, index)
            if pick is None:
                reply = f"❌ Index {index} is out of range. Valid range: 1–{total}."
            else:
                reply = f"#{index} from the list of considerations:\n\n{_format(pick)}"
        else:
            pick = db.find_item(CATEGORY)
            reply = f"Fresh from the list of considerations:\n\n{_format(pick)}" if pick else "No games in the list yet. Use !addgame to add one!"
        await bot_api.send_text_message(room_id, reply)
        return True

    if not lower.startswith("!"):
        return False

    # !addgame <name> | <note>
    if lower.startswith("!addgame"):
        rest = stripped[len("!addgame"):].strip()
        if not rest:
            await bot_api.send_text_message(
                room_id,
                "Usage: !addgame <name> [| <note>]\nExample: !addgame Minecraft | sandbox survival game\nExample: !addgame Minecraft",
            )
            return True
        if "|" in rest:
            name, _, note = rest.partition("|")
        else:
            name = rest
            note = ""
        added_by = sender.lstrip("@").split(":")[0]
        error = db.add_item(CATEGORY, name, added_by, note=note)
        reply = error if error else f"✅ I will add **{name.strip()}** to the list of considerations"
        await bot_api.send_text_message(room_id, reply)
        return True

    # !removegame <name>
    if lower.startswith("!removegame"):
        name = stripped[len("!removegame"):].strip()
        if not name:
            await bot_api.send_text_message(
                room_id,
                "Usage: !removegame <name>\nExample: !removegame Minecraft",
            )
            return True
        result = db.remove_item(CATEGORY, name)
        if result is None:
            reply = f"❌ No game named **{name}** found. Names are case-insensitive."
        else:
            reply = f"🗑️ Removed **{result}** from the game list."
        await bot_api.send_text_message(room_id, reply)
        return True

    # !games (help alias)
    if lower.startswith("!games"):
        await bot_api.send_text_message(room_id, HELP_TEXT)
        return True

    return False
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage