1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-30 15:04:18 +00:00
royalnet/strings.py

269 lines
11 KiB
Python
Raw Normal View History

2019-02-10 15:55:47 +00:00
import utils
2019-02-10 15:40:29 +00:00
import dice
import typing
2019-01-25 14:28:47 +00:00
class SafeDict(dict):
def __missing__(self, key):
2019-02-15 21:21:41 +00:00
return "{" + key + "}"
2019-01-25 14:28:47 +00:00
2019-02-15 18:42:02 +00:00
def safely_format_string(string: str, words: typing.Dict[str, str] = None, ignore_escaping=False) -> str:
if words is None:
words = {}
2019-02-09 18:57:49 +00:00
if ignore_escaping:
escaped = words
else:
escaped = {}
for key in words:
2019-03-01 17:02:22 +00:00
escaped[key] = str(words[key]).replace("<", "&lt;").replace(">", "&gt;")
return string.format_map(SafeDict(**escaped))
2019-01-25 14:28:47 +00:00
2019-01-28 21:55:55 +00:00
# Generic telegram errors
class TELEGRAM:
2019-02-01 18:21:46 +00:00
BOT_STARTED = "✅ Hai autorizzato il bot ad inviarti messaggi privati."
2019-02-23 13:06:33 +00:00
FIORYGI_AWARDED = "⭐️ {mention} è stato premiato con <b>{number} {fiorygi}</b> per <i>{reason}</i>!"
2019-02-01 18:21:46 +00:00
2019-01-25 14:28:47 +00:00
class ERRORS:
2019-01-28 21:55:55 +00:00
CRITICAL_ERROR = "☢ <b>ERRORE CRITICO!</b>\nIl bot ha ignorato il comando.\nUna segnalazione di errore è stata automaticamente mandata a @Steffo.\n\nDettagli dell'errore:\n<pre>{exc_info}</pre>"
2019-02-15 21:21:41 +00:00
CRITICAL_ERROR_QUERY = "☢ ERRORE CRITICO!"
UNAUTHORIZED_USER = "⚠ Non sono autorizzato a inviare messaggi a {mention}.\nPer piacere, {mention}, inviami un messaggio in privata!"
UNAUTHORIZED_GROUP = "⚠ Non sono autorizzato a inviare messaggi in <i>{group}</i>.\n@Steffo, aggiungimi al gruppo o concedimi i permessi!"
2019-01-25 14:28:47 +00:00
2019-01-28 21:55:55 +00:00
PONG = "🏓 Pong!"
2019-02-19 18:37:17 +00:00
ESCAPE = "{text}"
2019-01-28 21:55:55 +00:00
2019-02-10 01:29:11 +00:00
# Ah, non lo so io.
class AHNONLOSOIO:
ONCE = "😐 Ah, non lo so io!"
AGAIN = "😐 Ah, non lo so nemmeno io..."
2019-02-10 14:55:39 +00:00
# Bridge commands between Discord and Telegram
class BRIDGE:
SUCCESS = "✅ Comando inoltrato a Discord."
FAILURE = "❎ Errore nell'esecuzione del comando su Discord."
class ERRORS:
INVALID_SYNTAX = "⚠ Non hai specificato un comando!\nSintassi: <code>/bridge (comando)</code>"
INACTIVE_BRIDGE = "⚠ Il collegamento tra Telegram e Discord non è attivo al momento."
2019-02-15 18:42:02 +00:00
# Random spellslinging
class CAST:
class ERRORS:
NOT_YET_AVAILABLE = "⚠ Il nuovo cast non è ancora disponibile! Per un'anteprima sulle nuove funzioni, usa <code>/spell</code>."
2019-02-10 01:29:11 +00:00
# Ciao Ruozi!
class CIAORUOZI:
THE_LEGEND_HIMSELF = "👋 Ciao me!"
SOMEBODY_ELSE = "👋 Ciao Ruozi!"
# The /color meme, from Octeon
COLOR = "<i>I am sorry, unknown error occured during working with your request, Admin were notified</i>"
# Diario
class DIARIO:
SUCCESS = "✅ Riga aggiunta al diario:\n{diario}"
ANONYMOUS = "Anonimo"
class ERRORS:
INVALID_SYNTAX = "⚠ Sintassi del comando errata.\nSintassi: <code>/diario (frase)</code>, oppure rispondi a un messaggio con <code>/diario</code>."
NO_TEXT = "⚠ Il messaggio a cui hai risposto non contiene testo."
# Diario search
class DIARIOSEARCH:
HEADER = " Risultati della ricerca di {term}:\n"
class ERRORS:
INVALID_SYNTAX = "⚠ Non hai specificato un termine da cercare!\nSintassi: <code>/{command} (termine)</code>"
RESULTS_TOO_LONG = "⚠ Sono presenti troppi risultati da visualizzare! Prova a restringere la ricerca."
# Eat!
class EAT:
2019-02-10 14:55:39 +00:00
FOODS = {
"_default": "🍗 Hai mangiato {food}!\n<i>Ma non succede nulla.</i>",
"tonnuooooooro": "👻 Il {food} che hai mangiato era posseduto.\n<i>Spooky!</i>",
"uranio": "☢️ L'{food} che hai mangiato era radioattivo.\n<i>Stai brillando di verde!</i>",
"pollo": '🍗 Il {food} che hai appena mangiato proveniva <a href="https://store.steampowered.com/app/353090/Chicken_Invaders_5/">dallo spazio</a>.\n<i>Coccodè?</i>',
"ragno": "🕸 Hai mangiato un {food}.\n<i>Ewww!</i>",
"curry": "🔥 BRUCIAAAAAAAAAA! Il {food} era piccantissimo!\n<i>Stai sputando fiamme!</i>",
"torta": "⬜️ Non hai mangiato niente.\n<i>La {food} è una menzogna!</i>",
"cake": "⬜️ Non hai mangiato niente.\n<i>The {food} is a lie!</i>",
"biscotto": "🍪 Hai mangiato un {food} di contrabbando.\n<i>L'Inquisizione non lo saprà mai!</i>",
"biscotti": "🍪 Hai mangiato tanti {food} di contrabbando.\n<i>Attento! L'Inquisizione è sulle tue tracce!</i>",
"tango": "🌳 Hai mangiato un {food}, e un albero insieme ad esso.\n<i>Senti il tuo corpo curare le tue ferite.</i>",
"sasso": "🥌 Il {food} che hai mangiato era duro come un {food}\n<i>Stai soffrendo di indigestione!</i>",
"gnocchetti": "🥘 Ullà, sono duri 'sti {food}!\n<i>Fai fatica a digerirli.</i>",
"tide pods": "☣️ I {food} che hai mangiato erano buonissimi.\n<i>Stai sbiancando!</i>"
2019-02-10 14:55:39 +00:00
}
class ERRORS:
INVALID_SYNTAX = "⚠ Non hai specificato cosa mangiare!\nSintassi: <code>/eat (cibo)</code>"
2019-02-19 18:37:17 +00:00
# Emojify a string
class EMOJIFY:
RESPONSE = "{emojified}"
class ERRORS:
INVALID_SYNTAX = "⚠ Non hai specificato una frase!\nSintassi: <code>/emojify (testo)</code>"
2019-01-28 21:55:55 +00:00
# Royalnet linking
class LINK:
SUCCESS = "✅ Collegamento riuscito!"
2019-01-28 21:55:55 +00:00
class ERRORS:
2019-02-10 01:29:11 +00:00
INVALID_SYNTAX = "⚠ Non hai specificato un username!\nSintassi: <code>/link (username)</code>"
NOT_FOUND = "⚠ Non esiste nessun account Royalnet con quel nome.\nNota: gli username sono case-sensitive, e iniziano sempre con una maiuscola!"
2019-01-28 21:55:55 +00:00
ALREADY_EXISTING = "⚠ Questo account è già collegato a un account Royalnet."
2019-02-10 01:29:11 +00:00
ROYALNET_NOT_LINKED = "⚠ Il tuo account Telegram non è connesso a Royalnet! Connettilo con <code>/link (username)</code>."
2019-01-28 21:55:55 +00:00
2019-01-28 19:45:31 +00:00
# Markov strings
class MARKOV:
class ERRORS:
NO_MODEL = "⚠ La catena di Markov non è disponibile."
GENERATION_FAILED = "⚠ <code>markovify</code> non è riuscito a generare una frase. Prova di nuovo?\n E' un'avvenimento sorprendentemente raro..."
SPECIFIC_WORD_FAILED = "⚠ <code>markovify</code> non è riuscito a generare una frase partendo da questa parola. Provane una diversa..."
MISSING_WORD = "⚠ La parola specificata non è presente nella catena di Markov. Provane una diversa..."
2019-01-25 14:28:47 +00:00
# Matchmaking service strings
class MATCHMAKING:
2019-02-10 15:55:47 +00:00
EMOJIS = {
"ready": "🔵",
"wait_for_me": "🕒",
"maybe": "",
"ignore": "",
"close": "🚩",
"cancel": "🗑"
2019-01-25 14:28:47 +00:00
}
2019-02-10 15:55:47 +00:00
ENUM_TO_EMOJIS = {
utils.MatchmakingStatus.READY: EMOJIS["ready"],
utils.MatchmakingStatus.WAIT_FOR_ME: EMOJIS["wait_for_me"],
utils.MatchmakingStatus.MAYBE: EMOJIS["maybe"],
utils.MatchmakingStatus.IGNORED: EMOJIS["ignore"],
2019-01-25 14:28:47 +00:00
}
BUTTONS = {
2019-02-10 15:55:47 +00:00
"match_ready": f"{EMOJIS['ready']} Sono pronto per iniziare!",
"match_wait_for_me": f"{EMOJIS['wait_for_me']} Ci sarò, aspettatemi!",
"match_maybe": f"{EMOJIS['maybe']} Forse vengo, se non ci sono fate senza di me.",
"match_ignore": f"{EMOJIS['ignore']} Non ci sarò.",
"match_close": f"{EMOJIS['close']} ADMIN: Avvia la partita",
"match_cancel": f"{EMOJIS['cancel']} ADMIN: Annulla la partita"
}
TICKER_TEXT = {
"match_ready": f"{EMOJIS['ready']} Hai detto che sei pronto per giocare!",
"match_wait_for_me": f"{EMOJIS['wait_for_me']} Hai chiesto agli altri di aspettarti.",
"match_maybe": f"{EMOJIS['maybe']} Hai detto che forse ci sarai.",
"match_ignore": f"{EMOJIS['ignore']} Non hai intenzione di partecipare.",
"match_close": f"{EMOJIS['close']} Hai notificato tutti che la partita sta iniziando.",
"match_cancel": f"{EMOJIS['cancel']} Hai annullato la partita."
}
GAME_START = {
2019-02-15 20:03:44 +00:00
int(utils.MatchmakingStatus.READY): "🔵 Che <b>{match_title}</b> abbia inizio!",
int(utils.MatchmakingStatus.WAIT_FOR_ME): "🕒 Sbrigati! <b>{match_title}</b> sta per iniziare!",
int(utils.MatchmakingStatus.MAYBE): "❓ <b>{match_title}</b> sta iniziando. Se vuoi partecipare, fai in fretta!",
2019-01-25 14:28:47 +00:00
}
class ERRORS:
2019-02-10 14:55:39 +00:00
INVALID_SYNTAX = "⚠ Sintassi del comando errata.\nSintassi: <pre>/mm [minplayers-][maxplayers] ['per'] (gamename) \\n[descrizione]</pre>"
2019-01-25 14:28:47 +00:00
NOT_ADMIN = "⚠ Non sei il creatore di questo match!"
2019-02-10 14:55:39 +00:00
MATCH_CLOSED = "⚠ Il matchmaking per questa partita è terminato."
2019-01-28 22:37:01 +00:00
# Pug sender
class PUG:
HERE_HAVE_A_PUG = '🐶 Ecco, tieni un <a href="{image_url}">carlino</a>.'
2019-02-22 01:05:49 +00:00
class ERRORS:
PRIVATE_CHAT_ONLY = "⚠ Foto di carlini possono essere inviate esclusivamente in chat privata, in seguito al Disegno di Legge Intergalattico n. 5116."
2019-02-10 13:40:20 +00:00
# Dice roller
class ROLL:
SUCCESS = "🎲 {result}"
2019-02-10 15:40:29 +00:00
SYMBOLS = {
dice.elements.Div: "/",
dice.elements.Mul: "*",
dice.elements.Sub: "-",
dice.elements.Add: "+",
dice.elements.Modulo: "%",
dice.elements.AddEvenSubOdd: "+-",
dice.elements.Highest: "h",
dice.elements.Lowest: "l",
dice.elements.Middle: "m",
dice.elements.Again: "a",
dice.elements.Successes: "e",
dice.elements.SuccessFail: "f",
dice.elements.ArrayAdd: ".+",
dice.elements.ArraySub: ".-",
dice.elements.Array: ",",
dice.elements.Extend: "|",
dice.elements.Reroll: "r",
dice.elements.Explode: "x",
dice.elements.ForceReroll: "rr"
}
2019-02-10 13:40:20 +00:00
class ERRORS:
2019-02-10 15:40:29 +00:00
INVALID_SYNTAX = "⚠ Sintassi del tiro di dadi non valida."
DICE_ERROR = "⚠ Il tiro di dadi è fallito."
2019-02-10 13:40:20 +00:00
# Ship creator
class SHIP:
RESULT = "💕 {one} + {two} = <b>{result}</b>"
2019-02-01 18:46:00 +00:00
2019-01-28 22:37:01 +00:00
class ERRORS:
2019-02-15 18:42:02 +00:00
INVALID_SYNTAX = "⚠ Non hai specificato correttamente i due nomi!\nSintassi: <code>/ship (nome) (nome)</code>"
INVALID_NAMES = "⚠ I nomi specificati non sono validi.\nRiprova con dei nomi diversi!"
2019-02-03 18:34:17 +00:00
2019-02-15 18:42:02 +00:00
# Get information about a spell
class SPELL:
HEADER = "🔍 La magia <b>{name}</b> ha le seguenti proprietà (v{version}):\n"
ACCURACY = "Precisione - <b>{accuracy}%</b>\n"
2019-02-18 23:28:13 +00:00
DAMAGE = "Danni - <b>{number}d{type}{constant}</b> <i>(in media {avg})</i>\n"
2019-02-15 18:42:02 +00:00
TYPE = "Tipo - <b>{type}</b>\n"
REPEAT = "Multiattacco - <b>×{repeat}</b>\n"
2019-02-18 23:28:13 +00:00
HEALING = "Cura - <b>{number}d{type}{constant}</b> <i>(in media {avg})</i>\n"
STAT = "Attrib. - <b>{name}{change}</b>\n"
STATUS_EFFECT = "Infligge - <b>{effect}</b> (<b>{chance}%</b> di probabilità)"
2019-02-17 22:59:04 +00:00
NOTHING = "<i>Chi la usa sguazza nell'acqua, senza ottenere alcun effetto.</i>"
2019-02-15 18:42:02 +00:00
class ERRORS:
INVALID_SYNTAX = "⚠ Non hai specificato la magia di cui vuoi conoscere i dettagli!\nSintassi: <code>/spell (nome)</code>"
2019-03-01 16:28:25 +00:00
# Game stats updates
class STATSUPDATE:
class BRAWLHALLA:
SOLO = "✳️ {username} ha ora <b>{rating}</b> ({delta}) Elo 1v1 su Brawlhalla!"
2019-03-01 16:56:45 +00:00
TEAM = "✳️ {username}+{other} hanno ora <b>{rating}</b> Elo 2v2 su Brawlhalla!"
2019-03-01 16:28:25 +00:00
2019-02-10 01:29:11 +00:00
# Secondo me, è colpa delle stringhe.
SMECDS = "🤔 Secondo me, è colpa {ds}."
2019-02-03 18:34:17 +00:00
# Wiki notifications
class WIKI:
PAGE_LOCKED = '🔒 La pagina wiki <a href="https://ryg.steffo.eu/wiki/{key}">{key}</a> è stata bloccata da <b>{user}</b>.'
PAGE_UNLOCKED = '🔓 La pagina wiki <a href="https://ryg.steffo.eu/wiki/{key}">{key}</a> è stata sbloccata da <b>{user}</b>.'
2019-02-26 15:24:28 +00:00
PAGE_UPDATED = '📖 La pagina wiki <a href="https://ryg.steffo.eu/wiki/{key}">{key}</a> è stata modificata da <b>{user}</b>.\n{reason} [{change}]'