forked from sass/tipibot
The economy had many coin faucets but almost no sinks: the /shop is
one-time ownership, and gambling/rob fines route to the house (which
players drain back via jackpots and heists), so they recirculate rather
than destroy coins. Result: steady inflation.
Add a consumables shop as a true recurring sink - buying destroys the
coins and grants a temporary boost, so there's always something to spend
on after gear is maxed:
- Energiajook XL (500) - 1h of 2x earnings on /work, /beg, /crime
- XP jook (500) - 1h of 2x EXP
- Kohv (300) - instantly clears all cooldowns
Timed buffs live in a new active_buffs field ({kind: expiry_iso}), pruned
on read; rebuying extends the timer. Effects hook where they belong:
earn_mult in income.do_work/do_beg/do_crime, exp_buff_mult in
levels.award_exp; kohv is self-contained. New /consumables command browses
the menu (with active buffs) or buys a boost. Covered by 9 tests.
Note: active_buffs is a new PocketBase field - run
scripts/sync_pb_schema.py before deploying or buffs won't persist.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
191 lines
3.3 KiB
Python
191 lines
3.3 KiB
Python
"""All user-facing text for TipiLAN Bot.
|
|
|
|
Strings live in domain submodules (common, commands, member, economy, admin,
|
|
games, fishing) and are re-exported here, so ``import strings`` and
|
|
``strings.NAME`` keep working unchanged. Edit the relevant submodule to change
|
|
any message, description, or flavour text without touching any logic code."""
|
|
|
|
from .common import (
|
|
MSG_BANNED,
|
|
MSG_SPAM_JAIL,
|
|
MSG_PONG,
|
|
MSG_RESTART_DONE,
|
|
MSG_RESTARTING,
|
|
MSG_SHUTTING_DOWN,
|
|
MSG_PAUSED,
|
|
MSG_UNPAUSED,
|
|
MSG_MAINTENANCE,
|
|
MSG_SYNC_DONE,
|
|
MSG_REMINDER,
|
|
MSG_LEVELUP,
|
|
MSG_LEVELUP_ROLE,
|
|
REMINDER_OPTS,
|
|
TITLE,
|
|
ERR,
|
|
CD_MSG,
|
|
REMINDERS_UI,
|
|
SEND_UI,
|
|
PATCHNOTES_UI,
|
|
STATUS_UI,
|
|
)
|
|
|
|
from .commands import (
|
|
CMD,
|
|
OPT,
|
|
HELP_CATEGORIES,
|
|
HELP_UI,
|
|
)
|
|
|
|
from .member import (
|
|
MEMBER_UI,
|
|
MEMBER_FIELDS,
|
|
ECONOMYSETUP_UI,
|
|
CHANNEL_UI,
|
|
BIRTHDAY_UI,
|
|
BIRTHDAY_MONTHS,
|
|
CHECK_UI,
|
|
)
|
|
|
|
from .economy import (
|
|
WORK_JOBS,
|
|
BEG_LINES,
|
|
BEG_JAIL_LINES,
|
|
CRIME_WIN,
|
|
CRIME_LOSE,
|
|
QUEST_UI,
|
|
QUEST_DESCRIPTIONS,
|
|
SHOP_UI,
|
|
ITEM_DESCRIPTIONS,
|
|
CONSUMABLES_UI,
|
|
CONSUMABLE_DESCRIPTIONS,
|
|
JAILED_UI,
|
|
SHOP_BTN,
|
|
DAILY_UI,
|
|
STATS_UI,
|
|
PROFILE_UI,
|
|
BALANCE_UI,
|
|
COOLDOWNS_UI,
|
|
RANK_UI,
|
|
WORK_UI,
|
|
BEG_UI,
|
|
CRIME_UI,
|
|
ROB_UI,
|
|
GIVE_UI,
|
|
BUY_UI,
|
|
LEADERBOARD_UI,
|
|
REQUEST_UI,
|
|
)
|
|
|
|
from .admin import (
|
|
ADMINVIEW_UI,
|
|
ADMIN,
|
|
SEASON,
|
|
PRESTIGE_SHOP_NAMES,
|
|
PRESTIGE_SHOP_DESCRIPTIONS,
|
|
PRESTIGE_UI,
|
|
)
|
|
|
|
from .games import (
|
|
SLOTS_TIERS,
|
|
ROULETTE,
|
|
HEIST_STORY,
|
|
HEIST_UI,
|
|
BJ,
|
|
JAILBREAK_UI,
|
|
SLOTS_UI,
|
|
RPS_UI,
|
|
RPS_CHOICES,
|
|
BJ_UI,
|
|
)
|
|
|
|
from .fishing import (
|
|
FISH_NAMES,
|
|
FISH_RARITY_NAMES,
|
|
FISH_RARITY_EMOJI,
|
|
FISH_JUNK_LINES,
|
|
FISH_UI,
|
|
)
|
|
|
|
__all__ = [
|
|
'MSG_BANNED',
|
|
'MSG_SPAM_JAIL',
|
|
'MSG_PONG',
|
|
'MSG_RESTART_DONE',
|
|
'MSG_RESTARTING',
|
|
'MSG_SHUTTING_DOWN',
|
|
'MSG_PAUSED',
|
|
'MSG_UNPAUSED',
|
|
'MSG_MAINTENANCE',
|
|
'MSG_SYNC_DONE',
|
|
'MSG_REMINDER',
|
|
'MSG_LEVELUP',
|
|
'MSG_LEVELUP_ROLE',
|
|
'REMINDER_OPTS',
|
|
'TITLE',
|
|
'ERR',
|
|
'CD_MSG',
|
|
'REMINDERS_UI',
|
|
'SEND_UI',
|
|
'PATCHNOTES_UI',
|
|
'STATUS_UI',
|
|
'CMD',
|
|
'OPT',
|
|
'HELP_CATEGORIES',
|
|
'HELP_UI',
|
|
'MEMBER_UI',
|
|
'MEMBER_FIELDS',
|
|
'ECONOMYSETUP_UI',
|
|
'CHANNEL_UI',
|
|
'BIRTHDAY_UI',
|
|
'BIRTHDAY_MONTHS',
|
|
'CHECK_UI',
|
|
'WORK_JOBS',
|
|
'BEG_LINES',
|
|
'BEG_JAIL_LINES',
|
|
'CRIME_WIN',
|
|
'CRIME_LOSE',
|
|
'QUEST_UI',
|
|
'QUEST_DESCRIPTIONS',
|
|
'SHOP_UI',
|
|
'ITEM_DESCRIPTIONS',
|
|
'CONSUMABLES_UI',
|
|
'CONSUMABLE_DESCRIPTIONS',
|
|
'JAILED_UI',
|
|
'SHOP_BTN',
|
|
'DAILY_UI',
|
|
'STATS_UI',
|
|
'PROFILE_UI',
|
|
'BALANCE_UI',
|
|
'COOLDOWNS_UI',
|
|
'RANK_UI',
|
|
'WORK_UI',
|
|
'BEG_UI',
|
|
'CRIME_UI',
|
|
'ROB_UI',
|
|
'GIVE_UI',
|
|
'BUY_UI',
|
|
'LEADERBOARD_UI',
|
|
'REQUEST_UI',
|
|
'ADMINVIEW_UI',
|
|
'ADMIN',
|
|
'SEASON',
|
|
'PRESTIGE_SHOP_NAMES',
|
|
'PRESTIGE_SHOP_DESCRIPTIONS',
|
|
'PRESTIGE_UI',
|
|
'SLOTS_TIERS',
|
|
'ROULETTE',
|
|
'HEIST_STORY',
|
|
'HEIST_UI',
|
|
'BJ',
|
|
'JAILBREAK_UI',
|
|
'SLOTS_UI',
|
|
'RPS_UI',
|
|
'RPS_CHOICES',
|
|
'BJ_UI',
|
|
'FISH_NAMES',
|
|
'FISH_RARITY_NAMES',
|
|
'FISH_RARITY_EMOJI',
|
|
'FISH_JUNK_LINES',
|
|
'FISH_UI',
|
|
]
|