├── .gitignore ├── LICENSE ├── README.md ├── generate_u3s.py ├── generate_units.py ├── i18n ├── 2048 │ └── en.json ├── 007 │ └── en.json ├── 8ball │ ├── en.json │ ├── fr.json │ ├── ja.json │ ├── ru.json │ └── zh-TW.json ├── battleship │ ├── en.json │ ├── fr.json │ ├── ja.json │ ├── ru.json │ └── zh-TW.json ├── bigtwo │ └── en.json ├── blackjack │ └── en.json ├── boggle │ └── en.json ├── chess │ └── en.json ├── connect4 │ ├── en.json │ ├── fr.json │ ├── ja.json │ ├── ru.json │ └── zh-TW.json ├── en.json ├── evolution │ ├── en.json │ └── ja.json ├── fight │ ├── en.json │ ├── fr.json │ └── ja.json ├── fish │ ├── en.json │ ├── fr.json │ ├── ja.json │ ├── ru.json │ └── zh-TW.json ├── fr.json ├── games │ ├── en.json │ ├── fr.json │ ├── ja.json │ ├── ru.json │ └── zh-TW.json ├── hangman │ ├── en.json │ ├── fr.json │ ├── ja.json │ ├── ru.json │ └── zh-TW.json ├── i18n │ └── en.json ├── ja.json ├── numguess │ ├── en.json │ ├── fr.json │ ├── ja.json │ ├── ru.json │ └── zh-TW.json ├── place │ └── en.json ├── regexes │ ├── en.json │ ├── fr.json │ ├── ja.json │ ├── ru.json │ └── zh-TW.json ├── ru.json ├── scratch │ ├── en.json │ ├── fr.json │ ├── ja.json │ ├── ru.json │ └── zh-TW.json ├── server │ ├── en.json │ ├── ja.json │ └── zh-TW.json ├── setgame │ └── en.json ├── units-meta │ └── en.json ├── units │ └── en.json ├── uno │ └── en.json ├── wiki │ ├── en.json │ ├── fr.json │ ├── ja.json │ ├── ru.json │ └── zh-TW.json ├── words │ └── en.json └── zh-TW.json ├── kenny2automate ├── __main__.py ├── all_words.txt ├── battleship.py ├── boggle.py ├── card_games.py ├── chess.py ├── connect4.py ├── countrylangs.json ├── dbl07.py ├── dms.py ├── emoji.py ├── eval_.py ├── evolution.py ├── fight │ ├── __init__.py │ ├── armors.json │ ├── data.py │ ├── items.json │ ├── monsters.json │ └── weapons.json ├── games.py ├── hangman.py ├── help.py ├── i18n.py ├── numguess.py ├── place.py ├── pow211.py ├── regexes.py ├── server │ ├── 404.html │ ├── __init__.py │ ├── favicon.ico │ ├── index.html │ ├── main.css │ ├── notloggedin.html │ ├── server.html │ ├── servers.html │ ├── settings.html │ └── template.html ├── sql │ ├── v0.sql │ ├── v1.sql │ ├── v2.sql │ ├── v3.sql │ ├── v4.sql │ ├── v5.sql │ └── v6.sql ├── tmpfiles.py ├── units.py ├── user-agents.json ├── utils.py └── words.py ├── requirements.txt ├── resources ├── card_games │ ├── set │ │ ├── cross-circle-blue-1.png │ │ ├── cross-circle-blue-2.png │ │ ├── cross-circle-blue-3.png │ │ ├── cross-circle-green-1.png │ │ ├── cross-circle-green-2.png │ │ ├── cross-circle-green-3.png │ │ ├── cross-circle-red-1.png │ │ ├── cross-circle-red-2.png │ │ ├── cross-circle-red-3.png │ │ ├── cross-octagon-blue-1.png │ │ ├── cross-octagon-blue-2.png │ │ ├── cross-octagon-blue-3.png │ │ ├── cross-octagon-green-1.png │ │ ├── cross-octagon-green-2.png │ │ ├── cross-octagon-green-3.png │ │ ├── cross-octagon-red-1.png │ │ ├── cross-octagon-red-2.png │ │ ├── cross-octagon-red-3.png │ │ ├── cross-square-blue-1.png │ │ ├── cross-square-blue-2.png │ │ ├── cross-square-blue-3.png │ │ ├── cross-square-green-1.png │ │ ├── cross-square-green-2.png │ │ ├── cross-square-green-3.png │ │ ├── cross-square-red-1.png │ │ ├── cross-square-red-2.png │ │ ├── cross-square-red-3.png │ │ ├── empty-circle-blue-1.png │ │ ├── empty-circle-blue-2.png │ │ ├── empty-circle-blue-3.png │ │ ├── empty-circle-green-1.png │ │ ├── empty-circle-green-2.png │ │ ├── empty-circle-green-3.png │ │ ├── empty-circle-red-1.png │ │ ├── empty-circle-red-2.png │ │ ├── empty-circle-red-3.png │ │ ├── empty-octagon-blue-1.png │ │ ├── empty-octagon-blue-2.png │ │ ├── empty-octagon-blue-3.png │ │ ├── empty-octagon-green-1.png │ │ ├── empty-octagon-green-2.png │ │ ├── empty-octagon-green-3.png │ │ ├── empty-octagon-red-1.png │ │ ├── empty-octagon-red-2.png │ │ ├── empty-octagon-red-3.png │ │ ├── empty-square-blue-1.png │ │ ├── empty-square-blue-2.png │ │ ├── empty-square-blue-3.png │ │ ├── empty-square-green-1.png │ │ ├── empty-square-green-2.png │ │ ├── empty-square-green-3.png │ │ ├── empty-square-red-1.png │ │ ├── empty-square-red-2.png │ │ ├── empty-square-red-3.png │ │ ├── filled-circle-blue-1.png │ │ ├── filled-circle-blue-2.png │ │ ├── filled-circle-blue-3.png │ │ ├── filled-circle-green-1.png │ │ ├── filled-circle-green-2.png │ │ ├── filled-circle-green-3.png │ │ ├── filled-circle-red-1.png │ │ ├── filled-circle-red-2.png │ │ ├── filled-circle-red-3.png │ │ ├── filled-octagon-blue-1.png │ │ ├── filled-octagon-blue-2.png │ │ ├── filled-octagon-blue-3.png │ │ ├── filled-octagon-green-1.png │ │ ├── filled-octagon-green-2.png │ │ ├── filled-octagon-green-3.png │ │ ├── filled-octagon-red-1.png │ │ ├── filled-octagon-red-2.png │ │ ├── filled-octagon-red-3.png │ │ ├── filled-square-blue-1.png │ │ ├── filled-square-blue-2.png │ │ ├── filled-square-blue-3.png │ │ ├── filled-square-green-1.png │ │ ├── filled-square-green-2.png │ │ ├── filled-square-green-3.png │ │ ├── filled-square-red-1.png │ │ ├── filled-square-red-2.png │ │ └── filled-square-red-3.png │ └── uno │ │ ├── blue-0.png │ │ ├── blue-1.png │ │ ├── blue-2.png │ │ ├── blue-3.png │ │ ├── blue-4.png │ │ ├── blue-5.png │ │ ├── blue-6.png │ │ ├── blue-7.png │ │ ├── blue-8.png │ │ ├── blue-9.png │ │ ├── blue-draw2.png │ │ ├── blue-reverse.png │ │ ├── blue-skip.png │ │ ├── draw4.png │ │ ├── green-0.png │ │ ├── green-1.png │ │ ├── green-2.png │ │ ├── green-3.png │ │ ├── green-4.png │ │ ├── green-5.png │ │ ├── green-6.png │ │ ├── green-7.png │ │ ├── green-8.png │ │ ├── green-9.png │ │ ├── green-draw2.png │ │ ├── green-reverse.png │ │ ├── green-skip.png │ │ ├── red-0.png │ │ ├── red-1.png │ │ ├── red-2.png │ │ ├── red-3.png │ │ ├── red-4.png │ │ ├── red-5.png │ │ ├── red-6.png │ │ ├── red-7.png │ │ ├── red-8.png │ │ ├── red-9.png │ │ ├── red-draw2.png │ │ ├── red-reverse.png │ │ ├── red-skip.png │ │ ├── wild.png │ │ ├── yellow-0.png │ │ ├── yellow-1.png │ │ ├── yellow-2.png │ │ ├── yellow-3.png │ │ ├── yellow-4.png │ │ ├── yellow-5.png │ │ ├── yellow-6.png │ │ ├── yellow-7.png │ │ ├── yellow-8.png │ │ ├── yellow-9.png │ │ ├── yellow-draw2.png │ │ ├── yellow-reverse.png │ │ └── yellow-skip.png ├── chess │ ├── black-bishop.png │ ├── black-board.png │ ├── black-king.png │ ├── black-knight.png │ ├── black-pawn.png │ ├── black-queen.png │ ├── black-rook.png │ ├── emojis.json │ ├── white-bishop.png │ ├── white-board.png │ ├── white-king.png │ ├── white-knight.png │ ├── white-pawn.png │ ├── white-queen.png │ └── white-rook.png └── emoji │ ├── 0_number.png │ ├── 10_number.png │ ├── 1_number.png │ ├── 2_number.png │ ├── 3_number.png │ ├── 4_number.png │ ├── 5_number.png │ ├── 6_number.png │ ├── 7_number.png │ ├── 8_number.png │ ├── 9_number.png │ ├── __letter.pdn │ ├── __letter.png │ ├── a_letter.png │ ├── b_letter.png │ ├── c_letter.png │ ├── clubs.png │ ├── d_letter.png │ ├── diamonds.png │ ├── e_letter.png │ ├── f_letter.png │ ├── g_letter.png │ ├── h_letter.png │ ├── hearts.png │ ├── i_letter.png │ ├── j_letter.png │ ├── k_letter.png │ ├── l_letter.png │ ├── m_letter.png │ ├── n_letter.png │ ├── no.png │ ├── spades.png │ └── yes.png └── setup.py /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | *.db* 3 | kenny2automate.txt 4 | *.log 5 | *.egg-info 6 | temp/ 7 | resources/place.png 8 | Scripts/ 9 | include/ 10 | Lib/ 11 | pyvenv.cfg 12 | .vs* 13 | config.json -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Ken Hilton 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # kenny2automate 2 | 3 | ## Running 4 | ```bash 5 | python3.6 -m kenny2automate 6 | ``` 7 | 8 | ## Installation 9 | 1. Install Python 3.6 or above 10 | 2. 11 | ```bash 12 | git clone https://github.com/Kenny2github/kenny2automate.git 13 | cd kenny2automate 14 | python3.6 setup.py develop --user 15 | ``` 16 | -------------------------------------------------------------------------------- /generate_u3s.py: -------------------------------------------------------------------------------- 1 | """Generate kenny2automate units i18n. 2 | 3 | Procedure: 4 | 1. Internationalize i18n/units-meta/en.json into your language. For example, 5 | Japanese i18n goes in i18n/units-meta/ja.json - note to only translate the 6 | JSON values, not keys. 7 | 2. Run `python3 generate_u3s.py ` 8 | 9 | """ 10 | 11 | import sys 12 | import json 13 | 14 | LANG = sys.argv[1] 15 | 16 | with open(f'i18n/units-meta/{LANG}.json') as f: 17 | units = json.load(f) 18 | 19 | sys.stdout = open(f'i18n/units/{LANG}.json', 'w') 20 | 21 | print('{') 22 | print(f' "cog-desc": {json.dumps(units["*"]["cog-desc"])},') 23 | print(f' "convert-desc": {json.dumps(units["*"]["convert-desc"])},') 24 | kinded = False 25 | for kind, data in units.items(): 26 | if kind == '*': 27 | continue 28 | k2n = data['name'] 29 | pairs = data['units'].items() 30 | if kinded: 31 | print(',') 32 | else: 33 | kinded = True 34 | string = json.dumps(units['*']['kind-desc']) 35 | string1 = json.dumps(units['*']['kind-unit1-desc']) 36 | string12 = json.dumps(units['*']['kind-unit1-unit2-desc']) 37 | for unit1, u2n1 in iter(pairs): 38 | for unit2, u2n2 in iter(pairs): 39 | if unit1 == unit2: 40 | continue 41 | string123 = string12.format( 42 | k2n, u2n1, u2n2 43 | ) 44 | print(f' "{kind}-{unit1}-{unit2}-desc": {string123},') 45 | string123 = string1.format(k2n, u2n1) 46 | print(f' "{kind}-{unit1}-desc": {string123},') 47 | string123 = string.format(k2n) 48 | print(f' "{kind}-desc": {string123}', end='') 49 | print('\n}') 50 | 51 | sys.stdout.close() 52 | sys.stdout = sys.__stdout__ 53 | -------------------------------------------------------------------------------- /i18n/007/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Play 007, a quick children's game!", 3 | "cmd-desc": "Play 007! Run `{0}help 007` for more.", 4 | "cmd-help": "The game progresses as follows:\n\nEach round, both players choose (at once) to either load (\ud83d\udce5), shoot (\ud83d\udd2b), or shield (\ud83d\udee1).\nEach time you load, your ammo goes up by one; each time you shield, your shields go up by one.\nIf you shoot while the other is shielding, your ammo gets deducted from their shields, then zeroed - unless you have more ammo than they have shields, in which case you win.\nIf you shoot while the other is loading, you win.\nIf you both shoot at the same time, whoever has more ammo wins.\n\n(Note: Variations of this game played in real life have rebounding shields, where if shields exceed ammo then the shooter loses instead of just being emptied.)", 5 | "join-desc": "Join a game of 007.", 6 | "leave-desc": "Leave your game of 007.", 7 | "here-desc": "Find a game of 007 in the current server.", 8 | "action-title": "Choose Your Action", 9 | "action": "LOAD: {0} - add 1 to your ammo\nSHOOT: {1} - shoot your opponent\nSHIELD: {2} - protect yourself from being shot", 10 | "player-you": "Your action", 11 | "player-them": "Their action", 12 | "ammo-title": "Ammo", 13 | "shields-title": "Shields", 14 | "start-title": "Game Start", 15 | "start": "The game has started.", 16 | "round-title": "Round Results", 17 | "round": "Here's what went down:", 18 | "game-over-title": "Game Over!", 19 | "you-won": "Congratulations! You are the true 007.", 20 | "you-lost": "You have been shot down by the real 007." 21 | } 22 | -------------------------------------------------------------------------------- /i18n/2048/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Play 2048!", 3 | "cmd-desc": "Play 2048!", 4 | "board-title": "Board", 5 | "board-footer": "Click an arrow twice to move that direction.", 6 | "points-title": "Points", 7 | "points": "You have **{0}** points. (Your highscore: **{1}**)", 8 | "won-title": "You Won!", 9 | "won": "Congratulations! You reached the 2048 tile!", 10 | "won-high": "Congratulations! You reached the 2048 tile!\n**New highscore**: {0}", 11 | "lost-title": "Game Over", 12 | "lost": "No more legal moves! Better luck next time!", 13 | "lost-high": "No more legal moves! Better luck next time!\n**New highscore**: {0}", 14 | "timed-out": "You didn't make a move for 10 minutes! Your game has been discarded." 15 | } 16 | -------------------------------------------------------------------------------- /i18n/8ball/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "a1": "It is certain.", 3 | "a2": "It is decidedly so.", 4 | "a3": "Without a doubt.", 5 | "a4": "Yes - definitely.", 6 | "a5": "You may rely on it.", 7 | "a6": "As I see it, yes.", 8 | "a7": "Most likely.", 9 | "a8": "Outlook good.", 10 | "a9": "Yes.", 11 | "a10": "Signs point to yes.", 12 | "u1": "Reply hazy, try again.", 13 | "u2": "Ask again later.", 14 | "u3": "Better not tell you now.", 15 | "u4": "Cannot predict now.", 16 | "u5": "Concentrate and ask again.", 17 | "n1": "Don't count on it.", 18 | "n2": "My reply is no.", 19 | "n3": "My sources say no.", 20 | "n4": "Outlook not so good.", 21 | "n5": "Very doubtful." 22 | } 23 | -------------------------------------------------------------------------------- /i18n/8ball/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "a1": "C'est certain.", 3 | "a2": "C'est ainsi.", 4 | "a3": "Sans aucun doute.", 5 | "a4": "Oui - définitivement.", 6 | "a5": "Vous pouvez compter là-dessus.", 7 | "a6": "Comme je le vois, oui.", 8 | "a7": "Très probablement.", 9 | "a8": "Bonne perspective.", 10 | "a9": "Oui.", 11 | "a10": "Les signes indiquent oui .", 12 | "u1": "Réponse vague, réessayez.", 13 | "u2": "Redemandez plus tard.", 14 | "u3": "Il vaut mieux ne pas vous le dire maintenant.", 15 | "u4": "Je ne peux pas le prédire maintenant.", 16 | "u5": "Concentrez-vous et redemandez.", 17 | "n1": "Ne comptez pas là-dessus.", 18 | "n2": "Ma réponse est non.", 19 | "n3": "Mes sources disent non.", 20 | "n4": "La perspective n'est pas si bonne.", 21 | "n5": "Très douteux." 22 | } 23 | -------------------------------------------------------------------------------- /i18n/8ball/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "a1": "もちろん。", 3 | "a2": "そうでしょう。", 4 | "a3": "疑ったら悪い。", 5 | "a4": "絶対そう。", 6 | "a5": "私を頼りにして。", 7 | "a6": "そうだね。", 8 | "a7": "らしい。", 9 | "a8": "よさそうだ。", 10 | "a9": "はい。", 11 | "a10": "いいえなんて言えない。", 12 | "u1": "再読み込みするといいようです。", 13 | "u2": "今時間ないんだ。", 14 | "u3": "言わないほうがいい。", 15 | "u4": "わからん。", 16 | "u5": "もう一回。", 17 | "n1": "どうだろう。", 18 | "n2": "いいえ", 19 | "n3": "違うようだ。", 20 | "n4": "そんなわけないだろ。", 21 | "n5": "疑わしい。" 22 | } 23 | -------------------------------------------------------------------------------- /i18n/8ball/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "a1": "Это точно.", 3 | "a2": "Это решительно так.", 4 | "a3": "Без сомнения.", 5 | "a4": "Да, безусловно.", 6 | "a5": "Вы можете положиться на него.", 7 | "a6": "Как я вижу, да.", 8 | "a7": "Скорее всего.", 9 | "a8": "Выглядит хорошо", 10 | "a9": "Да.", 11 | "a10": "Знаки указывают на «да».", 12 | "u1": "Ответ смутный, попробуйте ещё раз", 13 | "u2": "Спросите позже.", 14 | "u3": "Лучше не рассказывать вам сейчас.", 15 | "u4": "Не могу предсказать сейчас.", 16 | "u5": "Сконцентрируйтесь и спросите еще раз.", 17 | "n1": "Не рассчитывайте на это.", 18 | "n2": "Мой ответ - нет", 19 | "n3": "Мои источники утверждают, что нет.", 20 | "n4": "Это выглядит не очень хорошо", 21 | "n5": "Очень сомнительно." 22 | } -------------------------------------------------------------------------------- /i18n/8ball/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "a1": "可以肯定的是。", 3 | "a2": "絕對是這樣。", 4 | "a3": "毫無疑問。", 5 | "a4": "當然是。", 6 | "a5": "你可以依靠會是這樣。", 7 | "a6": "在我眼中是。", 8 | "a7": "最有可能的。", 9 | "a8": "前景良好。", 10 | "a9": "是。", 11 | "a10": "跡象表明是的。", 12 | "u1": "回复朦朧,再試一次。", 13 | "u2": "稍後再問。", 14 | "u3": "最好不要現在告訴你。", 15 | "u4": "現在無法預測。", 16 | "u5": "集中精力然後再問一遍。", 17 | "n1": "你不能依靠會是這樣。", 18 | "n2": "我的回答是否定。", 19 | "n3": "我的消息來源說不。", 20 | "n4": "前景不太好。", 21 | "n5": "很可疑。" 22 | } 23 | -------------------------------------------------------------------------------- /i18n/battleship/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Play Battleship!", 3 | "cmd-desc": "You sunk my battleship!\nUsage: {0}battleship [ascii:yes|no] [@user]", 4 | "instructions-title": "Instructions", 5 | "place-instructions": "Click a button **twice** to move the ship; click the check twice when you're done.", 6 | "edit-instructions": "Please send a message containing the exact content:\n{0}", 7 | "fire-instructions": "Edit the \"EDITEE\" message to contain a coordinate (e.g. A0 or 3b) to fire at it.", 8 | "wait-instructions": "Waiting for other player to fire...", 9 | "won-title": "You Won!", 10 | "won": "Congratulations! You sunk all of your opponent's battleships!", 11 | "lost-title": "You Lost!", 12 | "lost": "Your opponent sunk all of your battleships!", 13 | "hitboard": "Hitboard", 14 | "ship-sunk-title": "Sunk!", 15 | "ship-sunk": "You sunk a ship!", 16 | "help-title": "Help for Battleship", 17 | "help": "Join the game by pressing the handshake button that appears beneath the invitation.", 18 | "help-1-title": "Placing ships", 19 | "help-1": "Once the game has started, you will be presented with a board to place ships on. You have 5 ships: a 2-long, 3-long, 3-long, 4-long, and 5-long. Move the ships around using the buttons that appear at the bottom of the board; those buttons need to be clicked **twice** or they won't work! The fist or double arrow buttons move the ships in the corresponding directions two tiles. The two-way arrow buttons point the ship in that direction. Once you're done moving a ship, click the check button twice to place it there. After all your ships have been placed, the board will disappear, and you will have to wait for your opponent to finish placing their ships.", 20 | "help-2-title": "Firing at ships", 21 | "help-2": "Once all the ships have been placed, you will be presented with two boards: the first one is your ship layout, including your opponent's hits and misses; the second one is your view of your opponent's board, showing your hits and misses. You will be asked to send a message containing an exact string; once you have sent that message, the message asking for it will disappear, to confirm that you've sent it. Then, when it's your turn, you can fire at a tile by editing the same message to contain the coordinate you want to fire, e.g. \"A0\" or \"1b\". The game is over when someone has sunk all of their opponent's ships; whoever does so is the winner." 22 | } 23 | -------------------------------------------------------------------------------- /i18n/battleship/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "place-instructions": "Cliquez sur un bouton **deux fois** pour déplacer le bateau ; cliquez sur le bouton vert deux fois lorsque c'est bon.", 3 | "edit-instructions": "Merci d'envoyer un message contenant le contenu exact :", 4 | "fire-instructions": "Modifiez le message \"EDITEE\" message pour obtenir les coordonnées (ex : A0 ou 3b) où tirer.", 5 | "wait-instructions": "En attente que l'autre joueur tire", 6 | "won-title": "Tu as gagné !", 7 | "won": "Félicitations ! Tu as coulé toute la flotte de ton ennemi !", 8 | "lost-title": "Tu as perdu!", 9 | "lost": "Votre adversaire a coulé toute votre flotte !", 10 | "hitboard": "Tableau des tirs", 11 | "ship-sunk": "Vous avez coulé un bateau !", 12 | "help-title": "Aide pour bataille navale", 13 | "help": "Rejoingnez le jeu en cliquant sur le bouton de poignée de mains qui apparaît en-dessous de l'invitation", 14 | "help-1-title": "Placez vos bateaux", 15 | "help-1": "Quand le jeu aura démarré, vous receverez un tableau sur lequel il faudra placer vos bateaux. Vous avez 5 bateaux : un bateau de 2 de long, un bateau de 3 de long, un bateau de 3 de long, un bateau de 4 de long et un bateau de 5 de long. Déplacez les bateaux grâce aux boutons qui apparaissent en bas du tableau ; ces boutons doivent être cliqués **deux fois** ou cela ne fonctionnera pas ! Les premiers boutons ou boutons à double flèche déplacent le bateau dans la direction correspondante de 2 cases. Les boutons avec une flèche à double sens orientent le bateau dans la direction correspondante. Lorsque le bateau est bien placé, cliquez sur le bouton de validation 2 fois pour le placer définitivement à cet endroit. Après avoir placé tous vos bateaux, le tableau va disparaître et vous devrez attendre que votre adversaire finisse de placer ses bateaux.", 16 | "help-2-title": "Tirez sur un bateau", 17 | "help-2": "Une fois que tous les bateaux seront placés, deux tableaux vont apparître : le premier présente la disposion de vos bateaux, avec les frappes et les échecs de votre adversaire ; le second votre vue tu tableau de l'adversaire, montrant vos frappes et vos échecs. Il va vous être demandé d'envoyer un message contenant une chaîne de caractère bien précise ; une fois que vous aurez envoyé ce message, le message que l'on vous a nvoyé va disparaître, pour confirmer que le votre a bien été envoyé. Puis, quand c'est votre tour, vous pouvez can tirer sur une case en éditant le même message afin qu'il contienne les coordonnées d'où vous souhaitez tirer, ex : \"A0\" ou \"1b\". Le jeu se termine lorsque quelqu'un a coulé tous les bateaux de son adversaire; ce joueur gagne alors la partie." 18 | } 19 | -------------------------------------------------------------------------------- /i18n/battleship/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "instructions-title": "操作方法", 3 | "place-instructions": "ボタンを**二回**クリックして船を動かします。 終わったらチェックマークを**二回**押します。", 4 | "edit-instructions": "以下を正確にタイプしてください:\n{0}", 5 | "fire-instructions": "\"EDITEE\"というメッセージを、放火する座標に変えてください。", 6 | "wait-instructions": "他のプレイヤーが火を放とうとしています...", 7 | "won-title": "勝利!", 8 | "won": "おめでとうございます! 敵機全機沈没です!", 9 | "lost-title": "敗北...", 10 | "lost": "敵があなたの戦艦を沈没させました...", 11 | "hitboard": "ヒットボード", 12 | "ship-sunk-title": "沈没!", 13 | "ship-sunk": "船を沈没させました!", 14 | "help-title": "海戦 ヘルプ", 15 | "help": "ボタンを押して参加できます。", 16 | "help-1-title": "船の配置", 17 | "help-1": "ゲームが始まったら、船を置きます。5つあります: 長さが2のものが1つ、3が2つ、4が1つ、5が1つ。ボードの下のボタンで操作できます。 **2回**ボタンを押してください。 2つ矢印があれば2マス進めます。二方向の矢印は回転です。 終わったらチェックマークを**2回**押してください。終わった後はボードが消え、相手の船が置かれます", 18 | "help-2-title": "船に放火する", 19 | "help-2": "船が置かれたら、2つのボードがもらえます: 1つ目はあなたの船の配置で、相手の命中した/していない攻撃も含みます。 2つ目はあなたの攻撃が命中したかしていないかの表示です。 まずある単語を送信します。 終わったら単語を尋ねるメッセージは消えます。 あなたの順番になったら、\"A0\"や\"1b\"といった座標を入力します。相手の船をすべて沈没できたら優勝です。" 20 | } 21 | -------------------------------------------------------------------------------- /i18n/battleship/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "place-instructions": "Нажмите кнопку **дважды**, чтобы переместить корабль; дважды щелкните, когда закончите.", 3 | "edit-instructions": "Отправьте сообщение, содержащее точный контент:", 4 | "fire-instructions": "Отредактируйте сообщение сообщение \"EDITEE\" так, чтобы оно содержало координаты (например A0 или 3b), чтобы выстрелить туда.", 5 | "wait-instructions": "Ожадание, пока другие игроки выстелят…", 6 | "won-title": "Вы победили!", 7 | "won": "Поздравляю! Вы потопили все корабли соперника!", 8 | "lost-title": "Вы проиграли!", 9 | "lost": "Ваш соперник потопил все ваши корабли!", 10 | "hitboard": "Доска", 11 | "ship-sunk": "Вы потопили корабль!", 12 | "help-title": "Справка для Морского боя", 13 | "help": "Присоединитесь к игре, нажав кнопку подтверждения, которая появляется под приглашением.", 14 | "help-1-title": "Установка кораблей", 15 | "help-1": "Как только игра начнется, вам будет предоставлена доска для размещения кораблей. У вас есть 5 кораблей: 2-длинный, два 3-длинных, 4-длинный и 5-длинный. Перемещайте корабли, используя кнопки, которые появляются в нижней части доски; эти кнопки нужно нажать **дважды**, или они не будут работать! Кнопки простой или двойной стрелки перемещают корабли в соответствующих направлениях на две клетки. Кнопки двойных стрелок поворачивают корабль в соответствующем направлении. Когда вы закончите перемещение корабля, дважды нажмите кнопку проверки, чтобы поместить его туда. После того, как все ваши корабли будут установлены, доска исчезнет, и вам придется подождать, пока ваш соперник закончит размещение своих кораблей.", 16 | "help-2-title": "Выстреливание в корабли", 17 | "help-2": "Как только все корабли будут размещены, вам будут представлены две доски: первая - это макет вашего кораблей, включая попадания и промахи вашего противника; второй - это доска вашего соперника, показывающая ваши попадания и промахи. Вам будет предложено отправить сообщение, содержащее точную строку; после того, как вы отправите это сообщение, сообщение, запрашивающее его, исчезнет, чтобы подтвердить, что вы его отправили. Затем, когда настает ваша очередь, вы можете стрелять по клеткам, редактируя одно и то же сообщение, содержащее координаты, в которые вы хотите выстрелить, например, \"A0\" или \"1b\". Игра закавнчивается, когда кто-то потопит все корабли противника; тот, кто делает это, является победителем." 18 | } 19 | -------------------------------------------------------------------------------- /i18n/battleship/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "place-instructions": "按一個按鈕**兩次**來移動你的船;按右手旁的勾**兩次**來表明你完成了。", 3 | "fire-instructions": "發一個坐標(比如 A0 或 3)來射擊它。", 4 | "wait-instructions": "等待你的對手發射…", 5 | "won-title": "你贏了!", 6 | "won": "恭喜!你沉沒了你的對手的所有主力艦!", 7 | "lost-title": "你輸了!", 8 | "lost": "你的對手沉沒了你的所有主力艦!" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/bigtwo/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Play Big Two!", 3 | "cmd-desc": "Play Big Two!", 4 | "cmd-help": "See [Wikipedia](https://en.wikipedia.org/wiki/Big_two) for the rules.", 5 | "here-desc": "Look for a game in your current server.", 6 | "join-desc": "Join a game of Big Two!", 7 | "leave-desc": "Leave your current game of Big Two.", 8 | "start-desc": "Start the game of Big Two, if not enough players are there to automatically start.", 9 | "turn-footer": "It is now {0}'s turn.", 10 | "your-turn": "It is now your turn", 11 | "next-turn-title": "Next Turn", 12 | "player-played": "{0} played the trick below:", 13 | "player-passed": "{0} passed, so the last trick remains as:", 14 | "game-started-title": "Game Started", 15 | "game-started": "The game has started.", 16 | "hand-title": "Your Hand", 17 | "instructions-title": "Instructions", 18 | "instructions": "Send the numbers of the cards you want to play in your trick (in any order),\ne.g. `1 3 4 6 8`. Each card above is labelled with a number.\nTo pass, send `pass` (there is no automatic passing).", 19 | "last-card-title": "Last Card!", 20 | "last-card": "{0} is on their last card!" 21 | } 22 | -------------------------------------------------------------------------------- /i18n/blackjack/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Play Blackjack!", 3 | "blackjack-desc": "Play Blackjack!", 4 | "blackjack-cmd-help": "Run `{0}blackjack join` to join a game, `{0}blackjack leave` to leave it, or `{0}blackjack start` to (vote to) start it.", 5 | "join-desc": "Join a game of Blackjack!", 6 | "leave-desc": "Leave your game of Blackjack.", 7 | "start-desc": "Start or vote to start the game of Blackjack.", 8 | "help-desc": "Get an explanation of the game.", 9 | "help": "**Objective**\nThe objective of Blackjack is to get the most cards in your pile.\n\n**Rounds**\nEach round of blackjack goes roughly as follows:\n\n*Objective*\nThe objective of each round is to get the total value of your cards as close to 21 as possible, without going *over* 21.\nAce can be counted as either 1 or 11, and face cards count as 10.\n\n*Initial Hand*\n`1.` You are dealt two cards.\n`2.` One of your cards is shown to everyone else.\n\n*Hit*\n`3.` Whenever you like, if your total is under 21, you may *hit* - i.e. draw a card.\n`4.` If hitting brings your total above 21, you are *over* and you're immediately done.\n`5.` Otherwise, you may hit again until you don't feel safe hitting again.\n`6.` Once you're done hitting, click the check mark to mark yourself as done. You will then wait for other players to finish.\n\n*Round End*\n`7.` Once everyone is done, whoever has the highest total value not above 21 wins the round.\n`7a.` If multiple people have the highest score, everyone's cards go into the *pool*, which is collected by the next single winner.\n`7b.` Otherwise, the winner of the round takes all the cards in the pool and all cards in everyone's hands and puts them in their pile.\n`8.` Repeat from `1.`\n\n**End**\nOnce the deck runs out, the game is over and the person whose pile is the largest wins.", 10 | "starting-cards": "Others' Cards", 11 | "hand-title": "Your Hand", 12 | "hand": "Below is your hand:\n{0}\nClick the \u2795 to ask for a hit, or \u2714 to declare that you're done.", 13 | "done-title": "Declared Done", 14 | "done": "You're done! Waiting for other players to finish...", 15 | "round-over-title": "Round Over!", 16 | "round-over": "The round is over! {0} won with {1} points and took everyone's cards.", 17 | "round-over-pool": "The round is over! Multiple people had the highest score, so everyone's cards are now in the pool:\n{0}", 18 | "point": "{0}: {1} cards" 19 | } 20 | -------------------------------------------------------------------------------- /i18n/boggle/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Play Boggle!", 3 | "boggle-desc": "Play Boggle!", 4 | "here-desc": "Look for a game of Boggle in this server.", 5 | "join-desc": "Join a game of Boggle.", 6 | "leave-desc": "Leave your game of Boggle.", 7 | "start-desc": "Start (or vote to start) your game of Boggle.", 8 | "boggle-help": "http://www.fun-with-words.com/play_boggle.html\n**Note**: In this version, the `Q` implies the following `u`.", 9 | "get-ready-title": "Get ready!", 10 | "get-ready": "Starting in {0} seconds.", 11 | "board-title": "Go!", 12 | "board": "Below is the board.\n{0}", 13 | "verifying-words": "Checking words against dictionary and board...", 14 | "eliminating-dupes": "Eliminating words found by multiple players...", 15 | "results-title": "Results", 16 | "results": "Below are valid words from each player.", 17 | "result": "Total: {0} point(s).\n{1}", 18 | "winner-title": "Winner(s)" 19 | } 20 | -------------------------------------------------------------------------------- /i18n/chess/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Play Chess!", 3 | "cmd-desc": "Play Chess! Run `{0}help chess`.", 4 | "cmd-help": "If you don't know how to play chess: https://en.wikipedia.org/wiki/Chess", 5 | "here-desc": "Look for an opponent within your server.", 6 | "join-desc": "Join a game with anyone at all.", 7 | "leave-desc": "Stop looking for a game.", 8 | "start-desc": "Start the game of chess.", 9 | "board-title": "Board", 10 | "instructions": "Send the [algebraic notation](https://en.wikipedia.org/wiki/Algebraic_notation_(chess%29) for your move, e.g. `d4` or `Na3`.", 11 | "waiting": "Waiting for your opponent...", 12 | "timed-out": "No response after 10 minutes! The game has been cancelled.", 13 | "game-end-title": "Game Over", 14 | "draw": "The game is a draw!", 15 | "game-end": "The game has ended! Winner: {0}", 16 | "last-move": "Last move: {0}", 17 | "game-start": "game start", 18 | "status-title": "Status" 19 | } 20 | -------------------------------------------------------------------------------- /i18n/connect4/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Play Connect 4!", 3 | "here-desc": "Look for an opponent within your server.", 4 | "join-desc": "Join a game of Connect 4.", 5 | "spectate-desc": "Spectate a game of Connect 4.", 6 | "leave-desc": "Leave your current game of Connect 4.", 7 | "connect4-desc": "Play some Connect 4!", 8 | "connect4-help": "Run `{0}connect4 join` to join a game, `{0}connect4 leave` to leave. React with a number **then remove the reaction** to the board message to drop a piece in the corresponding column. At any time, react with (and remove) the down arrow to bring the board to the bottom of the channel.", 9 | "board-turn": "It is currently {0}'s turn.\nRun `{1}help connect4` for how to play.", 10 | "board-turn-spec": "It is currently {0}'s turn.", 11 | "board-title": "Board", 12 | "board-you-are": "\nYou are {0}", 13 | "game-timeout": "Nobody made a move for {0} seconds! The game has been cancelled.", 14 | "game-over-title": "Game Over!", 15 | "game-over-tied": "The game is tied! The board is full and no 4-in-a-rows have been made.", 16 | "game-over-description": "The game is over!\nWinner: {0}{1}\nLoser: {2}{3}" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/connect4/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "config-nothing-set": "Ce salon n'a aucune configuration ! Exécutez ;help connect4_config pour savoir comment le configurer.", 3 | "config-all-set": "Salon pour les parties globales de puissance 4 : {0}\nRôle à mentionner : {1}", 4 | "config-channel-set": "Salon pour les parties globales de puissance 4 : {0}", 5 | "config-reset": "La configuration de ce serveur a été retirée avec succès.", 6 | "config-no-empty": "Impossible de configurer sans saisir de paramètres...", 7 | "config-set-channel": "Le salon pour les parties globales de puissance 4 a été configuré avec succès sur {0}", 8 | "config-no-channel-but-role": "Impossible de paramétrer une mention pour les parties globales de puissance 4 sans paramétrer un salon !", 9 | "config-set-role": "Le salon pour les parties globales de puissance 4 a été configuré avec succès sur {0} et le rôle à mentionner a été configuré sur {1}", 10 | "ready-player-self": "Joueur 2 : {0}", 11 | "ready-player-global": "En attente que quelqu'un d'un autre serveur rejoigne...", 12 | "board-turn": "C'est actuellement le tour de {0}.", 13 | "board-title": "Tableau", 14 | "board-you-are": "\nVous êtes {0}", 15 | "game-timeout": "Personne n'a fait dde mouvement depuis {0} secondes ! le jeu a été annulé.", 16 | "game-over-title": "Fin de la partie !", 17 | "game-over-tied": "Egalité ! Le tableau est plein et aucune rangée de 4 n'a été faite.", 18 | "game-over-description": "Fin de la partie !\nGagnant: {0}{1}\nPerdant: {2}{3}" 19 | } 20 | -------------------------------------------------------------------------------- /i18n/connect4/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "config-nothing-set": "管理者用:未設定エラー ;help connect4_config 参照", 3 | "config-all-set": "グローバル対戦 {0}\nメンションする役職: {1}", 4 | "config-channel-set": "グローバル対戦チャンネル: {0}", 5 | "config-reset": "設定はリセットされました。", 6 | "config-no-empty": "設定エラー: 設定項目が足りません。", 7 | "config-set-channel": "グローバル対戦チャンネルを {0} に設定しました。", 8 | "config-no-channel-but-role": "グローバル対戦用のチャンネルが未設定なので、メンションする役職が設定できません。", 9 | "config-set-role": "グローバル対戦チャンネルを {0} に、メンションする役職を {1} にしました。", 10 | "ready-player-self": "プレイヤー2: {0}", 11 | "ready-player-global": "ほかのサーバーの対戦者を待っています。", 12 | "board-turn": "{0}のターンです。", 13 | "board-title": "ボード", 14 | "board-you-are": "\nあなたは {0}", 15 | "game-timeout": "{0} 秒以内に次の動作が行われなかったため、中止します。", 16 | "game-over-title": "ゲームオーバー!", 17 | "game-over-tied": "同点です! ボードがいっぱいで、かつ四つ並んでいません。", 18 | "game-over-description": "終了!\n勝者: {0}{1}\n敗者:{2}{3}" 19 | } 20 | -------------------------------------------------------------------------------- /i18n/connect4/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "config-nothing-set": "Ничего не установлено на этом сервере! Напиите ;help connect4_config чтобы узнать, как поставить его.", 3 | "config-all-set": "Канал для глобального connect4: {0}\nРоль в упоминании: {1}", 4 | "config-channel-set": "Канал для глобального connect4: {0}", 5 | "config-reset": "Успешно удалена конфигурация для этого сервера.", 6 | "config-no-empty": "Нельзя установить конфигурацию без параметров…", 7 | "config-set-channel": "Канал {0} успешно установлен, как канал для глобального connect4", 8 | "config-no-channel-but-role": "Нельзя установить канал для глобального connect4 без настройки прав доступа!", 9 | "config-set-role": "Канал {0} успешно установлен, как канал для глобального connect4 и роль в упоминании как {1}", 10 | "ready-player-self": "Игрок 2: {0}", 11 | "ready-player-global": "Ожидание, пока кто-то с другого севера присоединится…", 12 | "board-turn": "Сейчас ход {0}.", 13 | "board-title": "Доска", 14 | "board-you-are": "\nВы {0}", 15 | "game-timeout": "Никто не сделал ход за {0} секунд! Игра была автоматически отменена.", 16 | "game-over-title": "Игра окончена!", 17 | "game-over-tied": "Ничья! Доска была заполнена, но никто из игроков не поставил 4 в ряд.", 18 | "game-over-description": "Игра окончена!\nПобедитель: {0}{1}\nПроигравший: {2}{3}" 19 | } -------------------------------------------------------------------------------- /i18n/connect4/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "config-nothing-set": "這組沒有任何設置!請發`;help connect4_config`來知道怎麼設。", 3 | "config-all-set": "為了全局「連四」的頻道:{0}\n需要通知的身分組:{1}", 4 | "config-channel-set": "為了全局「連四」的頻道:{0}", 5 | "config-reset": "成功的重設了此組別的設置。", 6 | "config-no-empty": "不能設置空白的設置…", 7 | "config-set-channel": "成功地設置全局「連四」頻道至 {0}。", 8 | "config-no-channel-but-role": "不能設置通知身分組但不設置全局「連四」頻道!", 9 | "config-set-role": "成功地設置全局「連四」頻道至 {0} 和需要通知的身分組至 {1}", 10 | "ready-player-self": "遊戲者二:{0}", 11 | "ready-player-global": "等待其他組別的成員加入…", 12 | "board-turn": "現在輪到 {0}。", 13 | "board-title": "遊戲板", 14 | "board-you-are": "\n你是 {0}", 15 | "game-timeout": "沒有人在 {0} 秒時間內動手!遊戲已被取消。", 16 | "game-over-title": "遊戲完結!", 17 | "game-over-tied": "這場是並列的!整個遊戲板已經填滿了,而沒有人成功的連四塊一起。", 18 | "game-over-description": "遊戲完結了!\n優勝者:{0}{1}\n失敗者:{2}{3}" 19 | } 20 | -------------------------------------------------------------------------------- /i18n/evolution/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "An experiment in genetics.", 3 | "evol-desc": "Play Evolution, a random genetics game! Run `{0}help evol`.", 4 | "adopt-desc": "Roll the dice to adopt a new child.", 5 | "adopt-help": "Note that dice rolls for adoption tend to have slightly worse scores.", 6 | "propose-desc": "Propose a night of fun with another user.", 7 | "propose-help": "If the other user accepts, the child you create will have one of the four combinations of your and the other user's combined four genes.", 8 | "profile-desc": "Get your profile.", 9 | "claiming-soul-title": "Claiming Soul", 10 | "claiming-soul": "Claiming a soul for you...", 11 | "no-new-souls-title": "No New Souls", 12 | "no-new-souls": "There were no new souls waiting to be claimed. As such, you have been born from nothingness and have completely random genes as follows:\n{0}", 13 | "birth-title": "Child Born", 14 | "birth": "Your child, now named @{0}#{1}, has been born! Their genes are as follows:\n{2}", 15 | "claimed-soul-title": "Claimed Soul", 16 | "claimed-soul": "You are now attached to the soul of an entity whose dominant genes are:\n{0}", 17 | "adopted-title": "Child Adopted", 18 | "adopted": "You have requested the creation of an artificial child, whom you will adopt when they are born, at which point you will be notified as such.", 19 | "proposal-title": "Proposal Received", 20 | "proposal": "@{0}#{1} proposes procreation with you. Do you accept? They additionally want to say:\n{2}", 21 | "proposed-title": "Sent", 22 | "proposed": "Proposal sent. Good luck!", 23 | "proposal-rejected-title": "Proposal Rejected", 24 | "proposal-rejected": "Your procreation proposal to @{0}#{1} was rejected... try for someone else.", 25 | "rejected-proposal-title": "Rejected Proposal", 26 | "rejected-proposal": "You have rejected the procreation proposal from @{0}#{1}.", 27 | "proposal-accepted-title": "Proposal Accepted", 28 | "proposal-accepted": "Your procreation proposal to @{0}#{1} has been accepted! You will be notified when your child is born.", 29 | "accepted-proposal-title": "Accepted Proposal", 30 | "accepted-proposal": "You have accepted the procreation proposal from @{0}#{1}. You will be notified when your child is born.", 31 | "your-genes": "Your Genes", 32 | "no-parents": "The Void", 33 | "husk": "(soulless husk)", 34 | "no-children": "You have no children.", 35 | "your-parents": "Parent(s)", 36 | "your-children": "Children" 37 | } 38 | -------------------------------------------------------------------------------- /i18n/evolution/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "claiming-soul-title": "魂を呼び出しています", 3 | "claiming-soul": "あなたの魂を呼び出しています...", 4 | "no-new-souls-title": "魂が見つかりません", 5 | "no-new-souls": "呼び出す魂がないので、あなたの遺伝子は無から生まれ、完全にランダムになっています:\n{0}", 6 | "birth-title": "出産", 7 | "birth": "@{0}#{1} という子どもが生まれました! 遺伝子は:\n{2}", 8 | "claimed-soul-title": "魂が呼び出されました", 9 | "claimed-soul": "以下の遺伝子を持つ人の魂に結び付けられました:\n{0}", 10 | "adopted-title": "親になる", 11 | "adopted": "人工的な子どもをリクエストしました。生まれたときにあなたは親になります。そのとき通知されます。", 12 | "proposal-title": "プロポーズ", 13 | "proposal": "@{0}#{1} がプロポーズしました。 受け入れますか? コメント:\n{2}", 14 | "proposed-title": "送信", 15 | "proposed": "プロポーズしました。がんばってね!", 16 | "proposal-rejected-title": "振られました", 17 | "proposal-rejected": "@{0}#{1} に振られました... 他の人を試してみて下さい", 18 | "rejected-proposal-title": "却下したプロポーズ", 19 | "rejected-proposal": "@{0}#{1} からのプロポーズを却下しました。", 20 | "proposal-accepted-title": "プロポーズ成功!", 21 | "proposal-accepted": "@{0}#{1} とのプロポーズ成功! 出産時に通知されます。", 22 | "accepted-proposal-title": "承認したプロポーズ", 23 | "accepted-proposal": "@{0}#{1} からのプロポーズを承認しました。出産時に通知されます。", 24 | "your-genes": "遺伝子", 25 | "no-parents": "無", 26 | "husk": "(魂のない殻)", 27 | "no-children": "子どもがいません。", 28 | "your-parents": "親", 29 | "your-children": "子" 30 | } 31 | -------------------------------------------------------------------------------- /i18n/fight/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Fight!", 3 | "fight-desc": "A turn-based combat game. Run `{0}help fight` for more information.", 4 | "fight-help": "fight is a turn-based combat with monsters, multiplayer, special weapons, and more.\nSubcommands are listed below. Run `{0}help fight ` for more information about each subcommand.", 5 | "player-desc": "Fight with another person!", 6 | "player-help": "`gold_at_stake` is the amount of gold for the loser to give the winner.", 7 | "npc-desc": "Fight with an NPC. Run `{0}help fight npc` for more information.", 8 | "npc-help": "Running `{0}fight npc random` pitches you into a fight with a random non-player monster. This monster could be anything, so make sure you can deal with all available monsters! Run `{0}fight npc list` for a list of monsters. Run `{0}fight npc info ` for details about a specific monster.\n\nIf you want to fight a certain monster, run `{0}fight npc named `\nThis will send you against that monster. If you're just starting out, try fighting the ghost.\n\nGood luck fighting!", 9 | "random-desc": "Fight a random NPC. Make sure you can deal with everything!", 10 | "named-desc": "Fight a specific NPC.", 11 | "list-desc": "List all available monsters.", 12 | "list-help": "Run `{0}fight npc info ` for information about a specific monster.", 13 | "info-desc": "Get information about one monster.", 14 | "profile-desc": "Get information about yourself.", 15 | "equip-desc": "Equip something. Run `{0}help fight equip`.", 16 | "weapon-desc": "Equip a weapon.", 17 | "armor-desc": "Equip some armor.", 18 | "shop-desc": "Shop for new things. Run `{0}help fight shop`.", 19 | "shop-help": "`things` must be one of \"items\", \"weapons\", or \"armors\".", 20 | "creating-profile": "Creating profile for you...", 21 | "invalid-enemy": "{0} is not an existent enemy. Run `{0}fight npc list` to see available enemies.", 22 | "battle-started-title": "Battle Started!", 23 | "battle-started": "React {0} to fight, or {1} to use an item.", 24 | "battle-started-second": "When the time comes, react {0} to fight, or {1} to use an item.", 25 | "battle-ended-title": "Battle Ended!", 26 | "battle-ended": "Here are the results:", 27 | "battle-cancelled": "Player {0}'s DMs are occupied by another fight command! Try again later.", 28 | "winner": "Winner", 29 | "loser": "Loser", 30 | "damage-done-title": "Damage Done", 31 | "damage-done": "{0} did {1} damage to {2} with their {3}", 32 | "items-title": "Your Items", 33 | "items-instructions": "Send an item name to use it, or send \"nvm\" to go back to the fight.", 34 | "your-health": "Your Health", 35 | "enemys-health": "Enemy Health", 36 | "death-title": "You Died!", 37 | "death": "Oh no! You died! Unfortunately, this means you lost everything - your profile has been deleted.", 38 | "reward-title": "Reward", 39 | "reward": "You got {0} gold for defeating {1}! You now have {2} gold.", 40 | "loss-title": "Penalty for Defeat", 41 | "loss": "You lost {0} gold for losing to {1}! You now have {2} gold.", 42 | "enemies": "Enemies", 43 | "enemy-health": "Health", 44 | "enemy-reward": "Reward for beating", 45 | "enemy-weapon": "Weapon", 46 | "enemy-armor": "Armor", 47 | "profile-title": "Profile for {0}", 48 | "profile-name": "Name", 49 | "profile-health": "Health", 50 | "profile-gold": "Gold", 51 | "profile-weapons": "Weapons", 52 | "profile-armors": "Armors", 53 | "profile-items": "Items", 54 | "equipped": "(equipped)", 55 | "equip-success": "Successfully equipped", 56 | "equip-unowned": "You do not own this!", 57 | "shop-error": "\"things\" must be one of \"items\", \"weapons\", or \"armors\", to specify what you are shopping for.", 58 | "shop-items": "Items", 59 | "shop-name": "Name", 60 | "shop-action": "Action", 61 | "shop-price": "Price", 62 | "shop-weapons": "Weapons", 63 | "shop-damage": "Damage", 64 | "shop-armors": "Armors", 65 | "shop-defense": "Defense", 66 | "shop-footer": "Send the name (not localized!) of the thing you want to buy. Send \"quit\" to quit.", 67 | "shop-expensive": "You don't have enough gold to buy that!", 68 | "shop-bought": "Added to inventory. You now have {0} gold.", 69 | "shop-equipped": "Equipped. You now have {0} gold.", 70 | "shop-done": "Thank you for your business.", 71 | "name-localized": "{0} ({1})", 72 | "weapon-fist": "Fist", 73 | "weapon-dagger": "Dagger", 74 | "weapon-pistol": "Pistol", 75 | "weapon-fangs": "Fangs", 76 | "weapon-fangs-damage": "Fangs increase the user's health by 1 while dealing 2 damage to the opponent (minus defense)", 77 | "weapon-fire": "Flaming Breath", 78 | "weapon-bomb": "Bomb", 79 | "weapon-bomb-damage": "If the sum of two die rolls is not less than 6, does 10 damage. Otherwise, does nothing.", 80 | "weapon-wand": "Magic Wand", 81 | "armor-cloak": "Cloak", 82 | "armor-clothes": "Clothes", 83 | "armor-bandages": "Bandages", 84 | "armor-firesuit": "Fire Suit", 85 | "armor-firesuit-defense": "Mitigates all damage from Flaming Breath, but does nothing against other weapons.", 86 | "item-bandages": "Bandages", 87 | "item-bandages-action": "Bandages directly increase the user's health by 5.", 88 | "item-luck": "Luck Potion", 89 | "item-luck-action": "If the sum of two die rolls (i.e. a random number from 1 to 6) is not more than 6, the opponent's health is directly decreased by 1. Otherwise, it's increased by 1.", 90 | "monster-giant": "Giant", 91 | "monster-undead": "Undead", 92 | "monster-ghost": "Ghost", 93 | "monster-vampire": "Vampire", 94 | "monster-mummy": "Mummy", 95 | "monster-dragon": "Dragon", 96 | "monster-witch": "Witch" 97 | } 98 | -------------------------------------------------------------------------------- /i18n/fight/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "creating-profile": "Création de votre profil...", 3 | "invalid-enemy": "{0} n'est pas un ennemi existant. Exécutez `;fight npc list` pour voir les ennemis disponibles.", 4 | "battle-started-title": "Le combat a démarré !", 5 | "battle-started": "Réagis avec {0} pour combattre, ou avec {1} pour utiliser un objet.", 6 | "battle-started-second": "Lorsque ce sera le moment, réagis avec {0} pour combattre, ou avec {1} pour utiliser un objet.", 7 | "battle-ended-title": "Fin du combat !", 8 | "battle-ended": "Voici les résultats :", 9 | "battle-cancelled": "Les mp du joueur {0} sont occupés par une autre commande de combat ! Réessayez plus tard.", 10 | "winner": "Gagnant", 11 | "loser": "Perdant", 12 | "damage-done-title": "Dommages commis", 13 | "damage-done": "{0} a {1} endommagé {2} avec son {3}", 14 | "items-title": "Vos objets", 15 | "items-instructions": "Envoyez le nom d'un item pour l'utiliser, ou envoyez \"nvm\" pour retourner au combat.", 16 | "your-health": "Votre barre de vie", 17 | "enemys-health": "Barre de vie de votre ennemi", 18 | "death-title": "Tu es mort !", 19 | "death": "Oh non ! Tu es mort ! Malheureusement, cela signifie que tu as tout perdu - ton profil a été supprimé.", 20 | "reward-title": "Recompense", 21 | "reward": "Vous obtenez {0} or pour avoir battu {1} ! Vous avez désormais {2} or.", 22 | "loss-title": "Pénalité pour défaite", 23 | "loss": "Vous avez perdu {0} or pour avoir perdu contre {1} ! Vous avez désormais {2} or.", 24 | "enemies": "Ennemis", 25 | "enemy-health": "Barre de vie", 26 | "enemy-reward": "Récompense pour victoire", 27 | "enemy-weapon": "Arme", 28 | "enemy-armor": "Armure", 29 | "profile-title": "Profil de {0}", 30 | "profile-name": "Nom", 31 | "profile-health": "Barre de vie", 32 | "profile-gold": "Or", 33 | "profile-weapons": "Arme", 34 | "profile-armors": "Armures", 35 | "profile-items": "Objets", 36 | "equipped": "(équipé)", 37 | "equip-success": "Equipé avec succès", 38 | "equip-unowned": "Vous ne possédez pas ceci !", 39 | "shop-error": "\"choses\" doit être un \"objet\", une \"arme\", ou une \"armure\", pour préciser ce que vous voulez acheter.", 40 | "shop-items": "Objets", 41 | "shop-name": "Nom", 42 | "shop-action": "Action", 43 | "shop-price": "Prix", 44 | "shop-weapons": "Armes", 45 | "shop-damage": "Dommages", 46 | "shop-armors": "Armures", 47 | "shop-defense": "Défense", 48 | "shop-footer": "Envoyez le nom (non localisé !) de la chose que vous voulez acheter. Envoyez \"quitter\" pour quitter.", 49 | "shop-expensive": "Vous n'avez pas assez d'or pour acheter cela !", 50 | "shop-bought": "Ajouté à l'inventaire. Vous avez maintenant {0} or.", 51 | "shop-equipped": "Equippé. Vous avez mainteannt {0} or.", 52 | "shop-done": "Merci de votre viste.", 53 | "name-localized": "{0} ({1})", 54 | "weapon-fist": "Poing", 55 | "weapon-dagger": "Poignard", 56 | "weapon-pistol": "Pistolet", 57 | "weapon-fangs": "Croc", 58 | "weapon-fangs-damage": "Les crocs améliorent la vie de l'utilisateur de 1 en infligeant 2 dégâts à l'adversaire (moins la défense)", 59 | "weapon-fire": "Lance-flammes", 60 | "weapon-bomb": "Bombe", 61 | "weapon-bomb-damage": "Si la somme de deux lancés de dés n'est pas inférieure à 6, Inflige 10 dégâts. Sinon, ne fait rien.", 62 | "weapon-wand": "Baguette magique", 63 | "armor-cloak": "Cape", 64 | "armor-clothes": "Vêtements", 65 | "armor-bandages": "Bandages", 66 | "armor-firesuit": "Combinaison ignifugée", 67 | "armor-firesuit-defense": "Attenue tous les dégâts causés par un lance-flammes, mais ne fait rien contre les autres armes.", 68 | "item-bandages": "Bandages", 69 | "item-bandages-action": "Les bandages améliorent directement la vie de l'utilisateur de 5.", 70 | "item-luck": "Potion de chance", 71 | "item-luck-action": "Si la somme de deux lancés de dés (un nombre aléatoire entre 1 et 6)) n'est pas plus grand que 6, La vie de l'adversaire est directement diminuée de 1. Sinon, elle est améliorée de 1.", 72 | "monster-giant": "Géant", 73 | "monster-undead": "Mort-vivant", 74 | "monster-ghost": "Fantôme", 75 | "monster-vampire": "Vampire", 76 | "monster-mummy": "Momie", 77 | "monster-dragon": "Dragon", 78 | "monster-witch": "Sorcière" 79 | } 80 | -------------------------------------------------------------------------------- /i18n/fight/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "creating-profile": "プロファイルを作成中...", 3 | "invalid-enemy": "{0} は敵のリストに存在しません。`;fight npc list`で対戦相手を探せます。", 4 | "battle-started-title": "対決開始!", 5 | "battle-started": "{0}で戦うか、{1}でアイテムを使います。", 6 | "battle-started-second": "時間になれば、{0}で戦うか、{1}でアイテムを使います。", 7 | "battle-ended-title": "対決終了!", 8 | "battle-ended": "結果:", 9 | "battle-cancelled": "プレイヤー{0}のDMはほかのコマンドで使用中です!後で試してみてください。", 10 | "winner": "勝者", 11 | "loser": "敗者", 12 | "damage-done-title": "攻撃完了", 13 | "damage-done": "{0} は {3} で {2} に {1} ダメージを与えた!", 14 | "items-title": "アイテム", 15 | "items-instructions": "アイテム名を入力して使うか、 nvmと入力して対決に戻ります。", 16 | "your-health": "体力", 17 | "enemys-health": "敵の体力", 18 | "death-title": "ゲームオーバー!", 19 | "death": "ごめんなさい、あなたは死んでしまいました。プロファイルは削除されました。", 20 | "reward-title": "表彰", 21 | "reward": "{1}に勝ったため、{0}ゴールドをもらいました。現在{2}ゴールドあります。", 22 | "loss-title": "ペナルティ", 23 | "loss": "{1}に負けたため、{0}ゴールドを失いました。現在{2}ゴールドあります。", 24 | "enemies": "敵", 25 | "enemy-health": "体力", 26 | "enemy-reward": "表彰暦", 27 | "enemy-weapon": "武器", 28 | "enemy-armor": "よろい", 29 | "profile-title": "{0}のプロファイル", 30 | "profile-name": "名前", 31 | "profile-health": "体力", 32 | "profile-gold": "ゴールド", 33 | "profile-weapons": "武器", 34 | "profile-armors": "よろい", 35 | "profile-items": "アイテム", 36 | "equipped": "(装備中)", 37 | "equip-success": "装備しました。", 38 | "equip-unowned": "それ持ってないでしょ!", 39 | "shop-error": "物はitems、weapons、armorsのどれかです。", 40 | "shop-items": "アイテム", 41 | "shop-name": "名前", 42 | "shop-action": "行動", 43 | "shop-price": "値段", 44 | "shop-weapons": "武器", 45 | "shop-damage": "攻撃力", 46 | "shop-armors": "よろい", 47 | "shop-defense": "防御力", 48 | "shop-footer": "買うものの英語名を入力してください。quitで終了。", 49 | "shop-expensive": "ゴールドが足りません!", 50 | "shop-bought": "購入しました。現在の所持金は{0}ゴールドです。", 51 | "shop-equipped": "装備しました。現在の所持金は{0}ゴールドです。", 52 | "shop-done": "まいどあり!", 53 | "name-localized": "{0} ({1})", 54 | "weapon-fist": "拳", 55 | "weapon-dagger": "短剣", 56 | "weapon-pistol": "銃", 57 | "weapon-fangs": "薬", 58 | "weapon-fangs-damage": "薬で体力は1増えますが、敵に2ダメージを許します。", 59 | "weapon-fire": "火炎放射器", 60 | "weapon-bomb": "爆弾", 61 | "weapon-bomb-damage": "もし2つのさいころの目の和が6以上なら、10ダメージを与えます。そうでない場合は、何も起こりません。", 62 | "weapon-wand": "魔法の杖", 63 | "armor-cloak": "透明マント", 64 | "armor-clothes": "洋服", 65 | "armor-bandages": "包帯", 66 | "armor-firesuit": "炎のスーツ", 67 | "armor-firesuit-defense": "火炎放射器に対してのみ有効です。", 68 | "item-bandages": "包帯", 69 | "item-bandages-action": "体力を5回復します。", 70 | "item-luck": "賭け", 71 | "item-luck-action": "もし2つのさいころの目の和が6以下なら、敵の体力が1減ります。そうでない場合は1増えます。", 72 | "monster-giant": "巨人", 73 | "monster-undead": "怪物", 74 | "monster-ghost": "幽霊", 75 | "monster-vampire": "吸血鬼", 76 | "monster-mummy": "ミイラ", 77 | "monster-dragon": "ドラゴン", 78 | "monster-witch": "魔女" 79 | } 80 | -------------------------------------------------------------------------------- /i18n/fish/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Play card games!", 3 | "fish-cmd-desc": "Play Go Fish! Run `{0}help fish` to see subcommands.", 4 | "fish-cmd-help": "Running `{0}fish` will not start a game!", 5 | "fish-join-desc": "Join a game of fish!", 6 | "fish-leave-desc": "Leave the game of fish you joined.", 7 | "fish-start-desc": "Start (or vote to start) the game of fish.", 8 | "fish-help-desc": "Get a detailed explanation of Go Fish.", 9 | "fish-stats-title": "Situation", 10 | "fish-stats-description": "Your hand and books.", 11 | "fish-stats-hand-title": "Hand", 12 | "fish-stats-books-title": "Books", 13 | "fish-stats-status-title": "Status", 14 | "fish-stats-empty-hand": "Empty", 15 | "fish-stats-no-books": "None", 16 | "fish-checkbooks-title": "New books", 17 | "fish-m-card": "Send a card number (e.g. Q or 10) to ask for it.", 18 | "fish-m-wait": "Waiting for next player's question...", 19 | "fish-turn-title": "Next Turn", 20 | "fish-turn": "It is now {0}'s turn.", 21 | "fish-card-taken-title": "Card Taken", 22 | "fish-card-taken": "{0} asked for {1}s - since you had {2}, you were forced to hand them over.", 23 | "fish-card-got": "You got: {0}", 24 | "fish-card-missed-title": "Opponent Went Fishing", 25 | "fish-card-missed-unsafe": "{0} asked for {1}s - although you had {2}, you are not safe yet.", 26 | "fish-card-missed": "{0} asked for {1}s - since you had {2}, you are safe.", 27 | "fish-fish-got": "Go fish! You got a {0} - it's what you asked for!", 28 | "fish-fish": "Go fish! You got a {0}.", 29 | "fish-winners-title": "Winner(s)", 30 | "fish-winners": "Here are the winners: {0}\nCongratulations!", 31 | "fish-help": "**Starting a Game**\nJoin or create a game by running `{0}fish join`. If you created the game, once there are enough players you may run `{0}fish start` to start the game with everyone who has joined. If you decide not to play after all, run `{0}fish leave`.\n\n**Gameplay**\nWhen it is your turn, you will be presented with a list of cards you have in your hand, as well as a list of books you currently have. Send a card number (e.g. Q or 10) to ask for it. You can only ask for cards that you already have.\n\nWhen you ask for a card, everyone else that has any cards of the same number must give them to you, and if anyone had cards of the same number, you will receive a message saying what cards you received. If nobody has that number of card, you will \"Go Fish\", and draw a card from the deck. If you get what you ask for, or the card you drew was what you asked for, you may ask again; otherwise, it is the next player's turn.\n\n**While Waiting**\nWhen it is not your turn, you may periodically receive messages stating what cards have been taken from you, or what cards were asked for but not given. These can be ignored, though they may be of strategic importance.\n\n**Books**\nWhen you have 4 of the same number card, that is called a \"book\" and is removed from your hand and placed into your books list.\n\n**Ending**\nThe game ends when anyone empties their hand, or when the deck runs out, whichever comes first. Once the game has ended, the person(s) with the most books win(s).", 32 | "fish-all-timed-out-title": "Everyone Timed Out!", 33 | "fish-all-timed-out": "Everyone timed out! The game has been canceled.", 34 | "fish-timed-out-title": "You Timed Out", 35 | "fish-timed-out": "You didn't make a move within {0} seconds! You have been removed from the game.", 36 | "fish-player-choice-title": "Choose a Player", 37 | "fish-player-choice": "Choose a player to ask for cards from by clicking the number that represents them. Having done that, send a card number like Q or 10 to ask for it.", 38 | "fish-other-card-taken": "{0} asked {1} for {2}s - since they had {3}, they were forced to hand them over.", 39 | "fish-other-card-missed-unsafe": "{0} asked {1} for {2}s - although they had {3}, you are not safe yet.", 40 | "fish-other-card-missed": "{0} asked {1} for {2}s - since they had {3}, you are safe.", 41 | "point": "{0}: {1} books" 42 | } 43 | -------------------------------------------------------------------------------- /i18n/fish/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "fish-stats-title": "Situation", 3 | "fish-stats-description": "Votre main et vos carrés.", 4 | "fish-stats-hand-title": "Main", 5 | "fish-stats-books-title": "Carrés", 6 | "fish-stats-status-title": "Statut", 7 | "fish-stats-empty-hand": "Vide", 8 | "fish-stats-no-books": "Aucun", 9 | "fish-checkbooks-title": "Nouveaux carrés", 10 | "fish-m-card": "Envoyez le numéro d'une carte (ex : Q ou 10) pour le demander.", 11 | "fish-m-wait": "En attente de la question du joueur suivant...", 12 | "fish-turn": "C'est actuellement le tour de {0}.", 13 | "fish-card-taken": "{0} a demandé un {1} - puisque vous en avez {2}, vous êtes obligés de le(s) lui donner.", 14 | "fish-card-got": "Vous obtenez : {0}", 15 | "fish-card-missed-unsafe": "{0} a demandé un {1} - bien que vous en ayez {2}, vous n'êtes pas encore en sécurité.", 16 | "fish-card-missed": "{0} a demandé un {1} - puisque vous en avez {2}, vous êtes en sécurité.", 17 | "fish-fish-got": "Allez pêcher ! Vous obtenez un {0} - c'est ce que vous aviez demandé !", 18 | "fish-fish": "Allez pêcher ! Vous obtenez un {0}.", 19 | "fish-winners-title": "Gagnants", 20 | "fish-winners": "Les gagnants sont {0} ! Félicitations !", 21 | "fish-winners-sep": ", ", 22 | "fish-winners-lastsep": " et ", 23 | "fish-winner-title": "Gagnant", 24 | "fish-winner": "Le gagnant est {0}! Félicitations !", 25 | "fish-help": "Rejoins ou crée une partie en exécutant la commande `;fish join`. Si vous créez la partie, une fois qu'il y aura suffisament de joueurs vous pourrez exécuter `;fish start` pour commencer la partie avec tous ceux qui ont rejoint. Si vous décidez après tout de ne pas jouer, exécuter `;fish leave`. LOrsque c'est votre tour il vous sera présenté une liste des cartes que vous avez en main, ainsi qu'une liste des carrés que vous possédez actuellement. Envoyez le numéro d'une carte (ex : Q ou 10) pour la demander. Vous ne pouvez demander que les cartes que vous avez déjà. Lorsque vous demandez une carte, toute personne qui possède une carte avec le numéro demandé devra vous la donner, et si c'est la cas, vous receverez un message annonçant quelles cartes vous avez reçues. Si personne a une carte avec ce numéro, vous devrez \"Aller pêcher\", et piocher une carte à la pioche. Si vous obtenez ce que vous avez demandé, ou si vous piochez la carte demandée, vous pourrez demander une carte à nouveau, sinon ça sera au tour du joueur suivant. Lorsque ce n'est pas votre tour, vous receverez de temps en temps des messages vous indiquant quelles cartes vous avez dû donner, ou quelles cartes ont été demandées alors que personne n'en possèdait. Vous pouvez choisir de les ignorer si vous le souhaitez. Lorsque vous avez 4 cartes avec le même numéro, c'est ce que l'on appelle un \"Carré\" et ces cartes sont retirées de votre main pour être placées dans votre liste de carrés. La partie se termine lorsque quelqu'un n'a plus de carte dans sa main, ou si la pioche est vide, selon ce qui arrive en premier. Lorsque le jeu est terminé, celui ou ceux qui ont le plus de carrés gagnent." 26 | } 27 | -------------------------------------------------------------------------------- /i18n/fish/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "fish-stats-title": "状況", 3 | "fish-stats-description": "あなたの札と束", 4 | "fish-stats-hand-title": "手札", 5 | "fish-stats-books-title": "束", 6 | "fish-stats-status-title": "状態", 7 | "fish-stats-empty-hand": "空", 8 | "fish-stats-no-books": "なし", 9 | "fish-checkbooks-title": "新しい束", 10 | "fish-m-card": "Qや10といった番号を言って尋ねましょう。", 11 | "fish-m-wait": "次のプレイヤー待ちです。", 12 | "fish-turn-title": "次のターン", 13 | "fish-turn": "{0}のターン", 14 | "fish-card-taken-title": "カードは取られました", 15 | "fish-card-taken": "{0} は {1} を尋ねました。 {2} 枚持っていたので渡さないといけません。", 16 | "fish-card-got": "{0} をもらいました。", 17 | "fish-card-missed-title": "敵が尋ねました", 18 | "fish-card-missed-unsafe": "{0} は {1} を尋ねました。 1枚も持っていないけど、大丈夫ではありません。", 19 | "fish-card-missed": "{0} は {1} を尋ねました。 {2} 枚持ってるので、大丈夫です。", 20 | "fish-fish-got": "{0} をもらいました! 頼んだものです!", 21 | "fish-fish": "{0} をもらいました。", 22 | "fish-winners-title": "優勝者", 23 | "fish-winners": "{0}が勝ちました! おめでとうございます!", 24 | "fish-winner-title": "優勝者", 25 | "fish-winner": "{0}が勝ちました! おめでとうございます!", 26 | "fish-help": "`;fish join`を実行してゲームを開始、または参加します。もし十分なプレイヤーが集まったら、`;fish start`でゲームを開始できます。もしやめたかったら、スタート前に`;fish leave`を実行してください。あなたの番になったら、持ち札と束のリストが表示されます。Qや10といった札番号を尋ねます。持っていない札は尋ねられません。札を尋ねたら、他の人の持ち札にある尋ねた札と同じ数字の札はあなたのものになります。そのとき何を受け取ったかの表示があります。 もし何も受け取らなければ、Go Fishと言って、山から一枚引きます。もし尋ねたものと同じものを受け取ったならば、もう一回、でなければ、次の人にターンが移ります。他の人のターンのときは、あなたの札が取られたかどうかがわかります。無視しても構いません。4つの同じ数字の札がそろったら、「束」ができて、持ち札から束のリストに移ります。ゲームは手札がない人が出るか、山がなくなったときに終わります。最も多くの束を持っていた人が勝ちです。" 27 | } 28 | -------------------------------------------------------------------------------- /i18n/fish/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "fish-stats-title": "Cитуация", 3 | "fish-stats-description": "Ваша рука и книги.", 4 | "fish-stats-hand-title": "Рука", 5 | "fish-stats-books-title": "Книги", 6 | "fish-stats-status-title": "Статус", 7 | "fish-stats-empty-hand": "Пусто", 8 | "fish-stats-no-books": "Ничего", 9 | "fish-checkbooks-title": "Новые книги", 10 | "fish-m-card": "Отправьте номер карты (например, Q или 10) Чтобы спросить о ней.", 11 | "fish-m-wait": "Ожидание вопроса следующго игрока…", 12 | "fish-turn": "Сейчас ход {0}'s turn.", 13 | "fish-card-taken": "{0} спросил о {1} - так, как у вас есть {2}, вы вынуждены их передать.", 14 | "fish-card-got": "Вы получили: {0}", 15 | "fish-card-missed-unsafe": "{0} спросил о {1} - так, как у вас есть {2}, вы не в безопасности.", 16 | "fish-card-missed": "{0} спросил о {1} - так, как у вас есть {2}, вы в безопасности.", 17 | "fish-fish-got": "На рыбалку! У вас есть {0} - это то, о чём вы спрашивали!", 18 | "fish-fish": "На рыбалку! У вас есть {0}.", 19 | "fish-winners-title": "Победители", 20 | "fish-winners": "Победители это {0}! Поздравляю!", 21 | "fish-winners-sep": ", ", 22 | "fish-winners-lastsep": ", и ", 23 | "fish-winner-title": "Победитель", 24 | "fish-winner": "Победитель это {0}! Поздравляю!", 25 | "fish-help": "Присоединитесь к игре, нажав кнопку подтверждения, которая появляется под приглашением. Как только стартер игры нажмет на галочку или когда пройдет определенное количество времени, в зависимости от того, что наступит раньше, игра начнется со всех людей, которые нажали кнопку подтверждения. Когда настанет ваша очередь, вам будет представлен список карт, которые у вас есть в руке, а также список книг, которые вы сейчас имеете. Отправьте номер карты (например, Q или 10), чтобы спросить о ней. Вы можете только просить карты, которые у вас уже есть. Когда вы запрашиваете карточку, все остальные, у которых есть карточки этого номера, должны предоставить их вам, и если у кого-то были карточки того же номера, вы получите сообщение о том, какие карты вы получили. Если у кого-то нет такого количества карточек, вы будете «Go Fish» и вытащите карту из колоды. Если вы получите то, о чем попросите, или карту, которую вы нарисовали, это то, о чем вы просили, вы можете снова спросить; в противном случае это очередь следующего игрока. Если это не ваша очередь, вы периодически получаете сообщения о том, какие карты были взяты у вас или какие карты были запрошены, но не указаны. Вы можете игнорировать их, если хотите. Когда у вас есть 4 одинаковых по номеру карточки, это называется «книга» и удаляется из вашей руки и помещается в ваш список книг. Игра заканчивается, когда кто-то опустошает руку или когда заканчивается колода, в зависимости от того, что наступит раньше. Как только игра закончится, тот(те), у кого есть наибольшее количество книг победит." 26 | } 27 | -------------------------------------------------------------------------------- /i18n/fish/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "fish-stats-title": "情況", 3 | "fish-stats-description": "你的手牌和書本。", 4 | "fish-stats-hand-title": "手牌", 5 | "fish-stats-books-title": "書本", 6 | "fish-stats-status-title": "狀態", 7 | "fish-stats-empty-hand": "空", 8 | "fish-stats-no-books": "無", 9 | "fish-checkbooks-title": "新書本", 10 | "fish-m-card": "發一個牌的數字(比如 Q 或 10)來要求它。", 11 | "fish-m-wait": "等待下一位遊戲者的要求…", 12 | "fish-turn": "現在輪到 {0}。", 13 | "fish-card-taken": "{0} 要求了 {1},而因你有 {2} 張,你被迫把它們傳給他。", 14 | "fish-card-got": "你得到了:{0}", 15 | "fish-card-missed-unsafe": "{0} 要求了 {1};雖然你有 {2} 張,但是你還未安全。", 16 | "fish-card-missed": "{0} 要求了 {1},而因你有 {2} 張,你暫時安全了。", 17 | "fish-fish-got": "去釣魚!你得到了一張 {0};它是你要求的牌!", 18 | "fish-fish": "去釣魚!你得到了一張 {0}。", 19 | "fish-winners-title": "優勝者", 20 | "fish-winners": "{0} 勝出了!恭喜!", 21 | "fish-winners-sep": "、", 22 | "fish-winners-lastsep": "、和 ", 23 | "fish-winner-title": "優勝者", 24 | "fish-winner": "{0} 勝出了!恭喜!" 25 | } 26 | -------------------------------------------------------------------------------- /i18n/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "qqq": "Français", 3 | "hello": "Hello World!", 4 | "hmmst": "hmmst", 5 | "whoami-title": "Informations de l'utilisateur pour {0}", 6 | "whoami-description": "Voici quelques informations à propos de {0}", 7 | "whoami-status": "Statut", 8 | "whoami-activity": "Activité", 9 | "whoami-id": "ID", 10 | "whoami-created-at": "Créé le", 11 | "whoami-joined-at": "Rejoint le", 12 | "whoami-roles": "Rôles", 13 | "prefix-reset": "Le préfixe a été réinitialisé avec succès pour {0}", 14 | "prefix-set": "Le préfixe a été changé avec succès pour {0} vers `{1}`", 15 | "resetprefix": "Le préfixe a été réinitialisé avec succès pour {0}", 16 | "purge": "{0} messages ont été purgés", 17 | "votetoban-ping-admin": "{0}, quelqu'un demande à ce que {1} soit banni !", 18 | "votetoban-msg": "**Vote pour bannir {0}**\nRéagissez avec {1} pour voter le bannissement; réagissez avec {2} pour voter le maintien.", 19 | "votetoban-cancelled": "Un admin est désormais en ligne. Le vote a été annulé. Veuillez plutôt lui demander.", 20 | "votetoban-few": "Pas assez de personnes ont voté ! ({0} au total, le minimum est 3.) L'utilisateur reste.", 21 | "votetoban-banned": "{0} votes pour et {1} votes contre. L'utilisateur a été banni.", 22 | "votetoban-ban-reason": "Banni avec le vote {0} contre {1} quand les admins n'étaient pas là.", 23 | "votetoban-innocent": "{0} votes pour et {1} votes contre. l'utilisateur reste." 24 | } 25 | -------------------------------------------------------------------------------- /i18n/games/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "playing": "Playing {0}", 3 | "ready-player-1": "Player 1: {0}\nReact with {1} to join!", 4 | "ready-player-2": "Player 1: {0}\nPlayer 2: {1}\nWaiting for Player 2 to join...", 5 | "ready-player-3": "Player 1: {0}\nReact with {1} to join!\n{0}, react with {2} when you're ready.", 6 | "game-timeout-title": "Game Timed Out", 7 | "game-timeout": "Nobody joined after {0} seconds! The game has been automatically cancelled.", 8 | "game-cancelled-title": "Game Cancelled", 9 | "game-cancelled": "Game cancelled by starter.", 10 | "game-starting-title": "Game Starting", 11 | "game-starting": "The game is starting - anyone joining past this point is too late.", 12 | "no-bots": "Wait, you can't play against a bot! Game cancelled.", 13 | "no-offline": "Wait, Player 2 is offline! Game cancelled.", 14 | "unready-player-2": "Player 2 didn't join after {0} seconds! The game has been automatically cancelled.", 15 | "help-title": "Help for {0}", 16 | "joined": "Joined {0}", 17 | "already-joined": "You have already joined this game!", 18 | "player-joined-title": "Player Joined", 19 | "player-joined": "A player joined the game! {0} more players are needed to start. {1} more players are needed to automatically start.", 20 | "enough-players-title": "Enough Players", 21 | "enough-players": "You may now run `{0}` to start the game.", 22 | "unjoined-title": "Left", 23 | "unjoined": "You have left the game of {0}.", 24 | "joined-owner": "You have joined the game of {0}, now waiting for at least {1} more players to join before you can start the game...", 25 | "joined-faux-owner": "You have joined the game of {0}, now waiting for {1} more people to join...", 26 | "joined-waiting-missing": "You have joined the game of {0}, now waiting for at least {1} more players to join...", 27 | "joined-waiting-specs": "You have joined the game of {0}, now waiting for at least {1} more spectators to join or for {2} to start the game...", 28 | "joined-waiting-minmax": "You have joined the game of {0}, now waiting for {1} more players to join or for {2} to start the game...", 29 | "joined-waiting-nomax": "You have joined the game of {0}, now waiting for {2} to start the game...", 30 | "not-enough-players": "There are not enough players to join! At least {0} are required, there are currently {1}.", 31 | "game-waiting-title": "Game Waiting", 32 | "game-waiting": "There is a game of {0} looking for players! Run `{1}` to join.", 33 | "game-waiting-footer": "You have received this message because you have opted into global game notifications for {0}.", 34 | "voted-title": "Voted to Start", 35 | "voted": "You have voted to start the game of {0}. {1} more votes are needed to start.", 36 | "vote-to-start": "You can also run {0} to vote to start the game. When half of the players (rounded down) have voted to start, the game will start.", 37 | "already-playing": "You are already in a game of {0}!", 38 | "players-desc": "Get a list of people playing a game.", 39 | "no-such-game": "There is no such game as \"{0}\"", 40 | "possibly-such-game": "There may be such a game, but if so it has no players.", 41 | "players-title": "Users waiting to play {0}", 42 | "rematch": "If you want a rematch, react with \ud83d\udd02; if not, react with \u23f9", 43 | "no-rematch-title": "No Rematch", 44 | "no-rematch": "You have decided not to rematch.", 45 | "player-rematching-title": "Player Rematching", 46 | "player-rematching": "{0} is rematching! Choose \ud83d\udd02 to join them.", 47 | "no-spectating": "This game does not support spectating.", 48 | "already-spectating": "You are already queued to spectate a game of {0}!", 49 | "player-spectating-title": "Player Spectating", 50 | "player-spectating": "A player is now spectating the game! {0} more players are needed to start. {1} more players can join this game.", 51 | "spectating-title": "Spectating {0}", 52 | "spectating": "You are queued to spectate this game." 53 | } 54 | -------------------------------------------------------------------------------- /i18n/games/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "playing": "Jouer à {0}", 3 | "ready-player-1": "Joueur 1 : {0}\n", 4 | "react-to-join": "Réagissez avec {0} pour rejoindre !", 5 | "ready-player-2": "Joueur 2 : {0}\nEn attente que le joueur 2 rejoigne...", 6 | "game-timeout": "Personne n'a rejoint après {0} secondes! La partie a été automatiquement annulée.", 7 | "game-cancelled": "Partie annulée par celui qui l'a lancée.", 8 | "no-bots": "Attendez, vous ne pouvez pas jouer contre un bot ! Partie annulée.", 9 | "no-offline": "Attendez, le joueur 2 est déconnecté ! Partie annulée.", 10 | "unready-player-2": "Le joueur 2 n'a pas rejoint après {0} secondes ! La partie a été automatiquement annulée.", 11 | "react-to-join-mult": "Réagissez avec {0} pour rejoindre !\n{1}, réagissez avec {2} quand vous êtes prêt.", 12 | "help-title": "Aide pour {0}", 13 | "joined": "A rejoint {0}", 14 | "already-joined": "Vous avez déjà rejoint cette partie!", 15 | "player-joined": "Un joueur a rejoint le jeu ! {0} joueurs supplémentaires sont nécessaires pour démarrer la partie. {1} joueurs supplémentaires sont nécessaires pour démarrer la partie automatiquement.", 16 | "enough-players": "Vous pouvez désormais exécuter `{0}` pour démarrer la partie.", 17 | "unjoined": "Vous avez quitté la partie de {0}.", 18 | "joined-waiting": "Vous avez rejoint la partie de {0}, désormais en attente que {1} joueurs supplémentaires rejoignent...", 19 | "joined-waiting-maxmin": "Vous avez rejoint la partie de {0}, désormais en attente que {1} joueurs supplémentaires rejoignent ou que la personne qui a lancé la partie la démarre...", 20 | "joined-waiting-nomax": "Vous avez rejoint la partie de {0}, désormais en attente que celui qui a lancé la partie la démarre...", 21 | "not-enough-players": "Pas assez de joueurs ont rejoint la partie ! Au moins {0} joueurs sont requis, il y en a actuellement {1}." 22 | } 23 | -------------------------------------------------------------------------------- /i18n/games/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "playing": "{0} で遊んでいます", 3 | "ready-player-1": "プレイヤー1: {0}\n{1} で反応して参加しましょう!", 4 | "ready-player-2": "プレイヤー1: {0}\nプレイヤー2: {1}\nプレイヤー2の参加待ちです...", 5 | "ready-player-3": "プレイヤー1: {0}\n{1} で反応して参加しましょう!\n{0}, 準備ができたら{2}で反応してください。", 6 | "game-timeout-title": "時間切れ", 7 | "game-cancelled-title": "ゲーム中止", 8 | "game-timeout": "{0} 秒たっても参加者がいません! ゲームは中止されました。", 9 | "game-cancelled": "始めた人がゲームをやめたいそうです。", 10 | "no-bots": "ボットと戦うことはできません。ゲームは中止されました。", 11 | "no-offline": "オフラインの人と戦うことはできません。ゲームは中止されました。", 12 | "unready-player-2": "{0} 秒たっても参加者がいません! ゲームは中止されました。", 13 | "help-title": "{0}について", 14 | "joined": "{0}に参加しました", 15 | "already-joined": "すでに参加しています!", 16 | "player-joined-title": "参加者が増えました", 17 | "player-joined": "参加者が増えました! あと{0}人必要です。 自動的に開始するには、あと{1}人必要です。", 18 | "enough-players-title": "プレイヤーが揃いました", 19 | "enough-players": "`{0}`でゲームを開始できます。", 20 | "unjoined-title": "抜ける", 21 | "unjoined": "{0}をやめました。", 22 | "joined-waiting": "{0}に参加しました。あと{1}人待っています...", 23 | "joined-waiting-maxmin": "{0}に参加しました。あと{1}人か、またはゲーム開始を待っています...", 24 | "joined-waiting-nomax": "{0}に参加しました。ゲーム開始を待っています...", 25 | "not-enough-players": "十分な参加者がいません! 最低でも{0}人は必要です。現在{1}人です。", 26 | "game-waiting-title": "ゲームに参加しませんか?", 27 | "game-waiting": "{0}のプレイヤーを募集中です! `{1}`で参加できます。", 28 | "game-waiting-footer": "グローバルゲーム通知を有効にしたため、{0}のプレイヤー募集通知を受け取っています。" 29 | } 30 | -------------------------------------------------------------------------------- /i18n/games/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "playing": "Игра в {0}", 3 | "ready-player-1": "Игрок 1: {0}\n", 4 | "react-to-join": "Поставьте реакцию {0} чтобы присоединиться!", 5 | "ready-player-2": "Player 2: {0}\nОжидание второго игрока…", 6 | "game-timeout": "Никто не присоеденился за {0} секунд! Игра была автоматически отменена.", 7 | "game-cancelled": "Игра отменена тем, кто её начал.", 8 | "no-bots": "Подождите, вы не можете играть с ботом! Игра отменена.", 9 | "no-offline": "Подождите, Игрок 2 не в сети! Игра отменена.", 10 | "unready-player-2": "Игрок 2 не присоеденился за {0} секунд! Игра была автоматически отменена.", 11 | "react-to-join-mult": "Поставьте реакцию {0} чтобы присоединиться!\n{1}, поставьте реакцию {2}, когда вы будете готовы.", 12 | "help-title": "Справка для {0}" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/games/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "playing": "正在玩 {0}", 3 | "ready-player-1": "遊戲者一:{0}\n", 4 | "react-to-join": "反應 {0} 來加入!", 5 | "ready-player-2": "遊戲者二:{0}\n等待遊戲者二加入…", 6 | "game-timeout": "沒有人在 {0} 秒的時間之內加入了!這場遊戲已被自動取消。", 7 | "game-cancelled": "遊戲被開發者取消。", 8 | "no-bots": "等一等,你不能跟機械人一起玩!遊戲已被取消。", 9 | "no-offline": "等一等,遊戲者二現在離線!遊戲已被取消。", 10 | "unready-player-2": "遊戲者二沒有在 {0} 秒的時間內加入!這場遊戲已被自動取消。", 11 | "react-to-join-mult": "反應 {0} 來加入!\n{1},你準備好的話,請反應 {2}。" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/hangman/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Play Hangman!", 3 | "crudehangman-desc": "Hangman for less permissions", 4 | "crudehangman-help": "Use this first in the server, to start the game in that channel; next, send the word in a DM with the bot, to set it. Once that's been done, guess a letter by sending it.", 5 | "hangman-desc": "Hangman!", 6 | "hangman-help": "Use this in the channel to start the game there, DM the bot the word to set it then react with letters to guess them.\nRequires the \"Manage Messages\" permission.", 7 | "crudehangman-occupied": "There is already a game going on in this channel!", 8 | "awaiting-dm-title": "Waiting...", 9 | "awaiting-dm": "Awaiting DM with word...", 10 | "main-title": "Game", 11 | "main": "{1}{0}", 12 | "missed": "Missed", 13 | "gotten": "Gotten", 14 | "comma-sep": ",", 15 | "end": "Game Over", 16 | "won": "Congratulations! You have guessed the complete word!", 17 | "lost": "You lost! The word was `{0}`.", 18 | "timeout-title": "Timeout", 19 | "timeout": "The word didn't arrive for a minute! The game has been automatically cancelled.", 20 | "wait": "WAIT DON'T GUESS YET", 21 | "timeout2": "Nobody guessed a letter for ten minutes! The game has been automatically cancelled." 22 | } 23 | -------------------------------------------------------------------------------- /i18n/hangman/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "crudehangman-occupied": "Il y a déjà un jeu en cours dans ce salon", 3 | "awaiting-dm": "En attente d'un MP avec le mot à trouver", 4 | "main": "{0}\nRaté: {1}\nTrouvé: `{2}`{3}", 5 | "comma-sep": ",", 6 | "won": "Félicitations ! Vous avez deviné le mot en entier !", 7 | "lost": "Vous avez perdu ! Le mot était \"{0}\".", 8 | "timeout": "Le mot n'est pas arrivé en une minute ! Le jeu a été automatiquement annulé.", 9 | "wait": "ATTENDEZ, NE PROPOSEZ PAS DE LETTRE MAINTENANT", 10 | "timeout2": "Personne n'a proposé de lettre depuis dix minutes ! Le jeu a été automatiquement annulé." 11 | } 12 | -------------------------------------------------------------------------------- /i18n/hangman/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "crudehangman-occupied": "このチャンネルですでにゲームが開催中です。", 3 | "awaiting-dm-title": "待っています...", 4 | "awaiting-dm": "言葉をDMで待っています。", 5 | "main-title": "ゲーム", 6 | "main": "{1}{0}", 7 | "missed": "ミス", 8 | "gotten": "当たり", 9 | "comma-sep": "、", 10 | "end": "ゲームオーバー", 11 | "won": "おめでとう!単語を当てました!", 12 | "lost": "負けました! 単語は `{0}`でした。", 13 | "timeout-title": "時間切れ", 14 | "timeout": "ゲーム開始から1分経過したけど言葉が届きません! ゲームは中止されました。", 15 | "wait": "こら、まだやるな", 16 | "timeout2": "10分間放置されています! ゲームは中止されました。" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/hangman/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "crudehangman-occupied": "В этом канал уже идёт игра!", 3 | "awaiting-dm": "Ожидание DM со словом…", 4 | "main": "{0}\nПропущено: {1}\nПолучено: `{2}`{3}", 5 | "comma-sep": ",", 6 | "won": "Поздравляю! Вы правильно отгадали слово!", 7 | "lost": "Вы проиграли! Слово было \"{0}\".", 8 | "timeout": "Слово не пришло через минуту. Игра была автоматически отменена.", 9 | "wait": "ЖДИТЕ, НЕ УГАДЫВАЙТЕ ПОКА", 10 | "timeout2": "Никто не угадал букву за десять минут! Игра была автоматически отменена." 11 | } -------------------------------------------------------------------------------- /i18n/hangman/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "crudehangman-occupied": "這個頻道已經有一場遊戲正在進行!", 3 | "awaiting-dm": "等待包含秘密詞直接信息…", 4 | "main": "{0}\n猜錯:{1}\n猜對:`{2}`{3}", 5 | "comma-sep": "、", 6 | "won": "恭喜!你成功的猜了整個秘密詞!", 7 | "lost": "抱歉,你失敗了!這輪的秘密詞時「{0}」。", 8 | "timeout": "我在一分鐘內沒有收到任何包含秘密詞的直接信息!這場遊戲已被自動取消。", 9 | "wait": "等等,現在不要猜!", 10 | "timeout2": "沒有人在十分鐘內猜了一個字母!這場遊戲已被自動取消。" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/i18n/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Internationalization commands and control.", 3 | "ogham-desc": "A fun little interpreter from English to Ogham.", 4 | "lang-desc": "(Re)Set your language.", 5 | "channel_lang-desc": "(Re)Set the channel's language", 6 | "i18n-desc": "Get the text of an i18n key.", 7 | "translate-desc": "Translate text into a language.", 8 | "unknown-lang": "Unrecognized langage: {0}. Valid languages are:\n{1}", 9 | "lang-success": "Successfully set langage for {0} to {1}.", 10 | "lang-success-reset": "Successfully reset language for {0}.", 11 | "translation-censored": "This server has censored part of this translation!", 12 | "translation-failed": "Translation was the original message back out.", 13 | "translation-same": "Translation source and destination languages were the same.", 14 | "invalid-lang": "{0} is not a valid language code.", 15 | "message-translation": "*[Message]({2}) in {0}->{1}*", 16 | "translation-requested-by": "Translation requested by {0}", 17 | "autotranslate-desc": "Automatically translate messages sent in this channel to a different language.", 18 | "at-on-desc": "Turn automatic translation on.", 19 | "at-off-desc": "Turn automatic translation off.", 20 | "already-autoing": "Messages are already being translated to all the specified languages!", 21 | "autolang-ended-title": "Automatic Translation Ended", 22 | "autolang-ended": "Messages are no longer being automatically translated to {0}.", 23 | "at-off-not-on": "Messages are not currently being translated from {0}!", 24 | "at-on-title": "Automatic Translation Started", 25 | "at-on": "Messages are being automatically translated to {0}." 26 | } 27 | -------------------------------------------------------------------------------- /i18n/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "qqq": "日本語", 3 | "comma-sep": "、", 4 | "and-sep": "、そして", 5 | "error": "エラー", 6 | "hello": "世界よ、こんにちは!", 7 | "hmmst": "ふーん", 8 | "whoami-title": "{0}についての情報", 9 | "whoami-description": "{0}についての情報です。", 10 | "whoami-status": "ステータス", 11 | "whoami-activity": "やっていること", 12 | "whoami-id": "ID", 13 | "whoami-created-at": "作成した日", 14 | "whoami-joined-at": "参加した日", 15 | "whoami-roles": "役職", 16 | "prefix-reset-title": "接頭辞設定解除", 17 | "prefix-reset": "{0}用の接頭辞設定を解除しました。", 18 | "prefix-set-title": "接頭辞設定", 19 | "prefix-set": "{0}用の接頭辞を`{1}`にしました。", 20 | "resetprefix": "{0}用の接頭辞設定を解除しました。", 21 | "prefix": "接頭辞", 22 | "purge-title": "一斉消去", 23 | "purge": "{0}個のメッセージは消え去った。", 24 | "votetoban-ping-admin": "{0}、{1}さんへのブロック依頼です! (Someone wants {1} to be banned)", 25 | "votetoban-title": "**{0} ブロック依頼**", 26 | "votetoban-cancelled-title": "中止", 27 | "votetoban-ended": "投票終了", 28 | "votetoban-msg": "{0} でブロック、 {2} で残す。", 29 | "votetoban-cancelled": "管理者({0})がやってきました。投票は取り消します。これからは直接聞いてネ。", 30 | "votetoban-few": "参加者が足りませんでした! (合計 {0} , 最少 3.) 残しましょう。", 31 | "votetoban-banned": "賛成 {0} 反対 {1} ブロックされました。", 32 | "votetoban-innocent": "賛成 {0} 反対 {1} 残しましょう。" 33 | } 34 | -------------------------------------------------------------------------------- /i18n/numguess/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Play a fun number-guessing game!", 3 | "numguess-desc": "Play a fun number-guessing game!", 4 | "numguess-intro": "Arr! I'm the Dread Pirate Roberts, and I have a secret!\nIt's a number from {0} to {1}. I'll give you {2} tries.\nSend a number to guess it.", 5 | "numguess-guess-title": "Guess?", 6 | "numguess-guess": "What's yer guess, matey?", 7 | "numguess-timeout": "Ye landlubberin' swabs didn't guess anything for {0} seconds! Ye don't get to play with me no more!", 8 | "numguess-oor": "Out of range, ye swab!", 9 | "numguess-low": "Too low, ye scurvy dog!", 10 | "numguess-high": "Too high, landlubber!", 11 | "numguess-range": "\nYer range is {0} to {1}; ye have {2} tries left.", 12 | "numguess-end": "Game be Endin'!", 13 | "numguess-correct": "Avast! Ye got it! Found my secret, ye did! With {0} tries left!", 14 | "numguess-oot": "No more tries, matey! Better luck next time! The secret number was {0}." 15 | } 16 | -------------------------------------------------------------------------------- /i18n/numguess/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "numguess-intro": "Arr ! Je suis le terrible pirate Roberts et j'ai un secret !\nC'est un nombre entre {0} et {1}. Tu as {2} essais.\nEnvoie un nombre pour le deviner.", 3 | "numguess-guess": "Que proposez-vous, cher ami ?", 4 | "numguess-timeout": "Cher terrien, vous n'avez rien proposé depuis {0} secondes ! Vous ne jouerez plus jamais avez moi !", 5 | "numguess-oor": "Hors de portée !", 6 | "numguess-low": "Trop petit !", 7 | "numguess-high": "Trop gros !", 8 | "numguess-range": "\nLe nombre est entre {0} et {1}; il vous reste {2} essais.", 9 | "numguess-correct": "Arrêtez ! Vous l'avez trouvé terrien ! Vous l'avez trouvé, mon secret ! Avec {0} essais restants!", 10 | "numguess-oot": "Plus aucun essai restant, cher ami. Ce sera pour une prochaine fois ! Le nombre secret était {0}." 11 | } 12 | -------------------------------------------------------------------------------- /i18n/numguess/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "numguess-intro": "{0}から{1}までの数を当ててください。{2}回挑戦できます。", 3 | "numguess-guess-title": "何でしょうか?", 4 | "numguess-guess": "数は何でしょうか?", 5 | "numguess-timeout": "{0}秒間当てられていないので終了します。", 6 | "numguess-oor": "条件はずれです。", 7 | "numguess-low": "数が小さいです。", 8 | "numguess-high": "数が大きいです。", 9 | "numguess-range": "\n範囲は{0}から{1}、{2}回できます。", 10 | "numguess-end": "ゲーム終了!", 11 | "numguess-correct": "{0}回残して成功しました!", 12 | "numguess-oot": "あちゃちゃ、失敗しました。数は{0}です。" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/numguess/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "numguess-intro": "Арр! Я ужасный пират Робертс, и у меня есть секрет!\nЭто число от {0} до {1}. Я дам тебе {2} попыток.\nОтправь число, чтобы угадать его.", 3 | "numguess-guess": "Твой ваиант?", 4 | "numguess-timeout": "Ye landlubberin' swab didn't guess anything for {0} seconds! Ye don't get to play with me no more!", 5 | "numguess-oor": "Вне диапазона!", 6 | "numguess-low": "Это слишком мало, презренный пёс!", 7 | "numguess-high": "Это слишком много, сухопутная крыса!", 8 | "numguess-range": "\nЧисло в диапазоне от {0} до {1}; осталось {2} попыток.", 9 | "numguess-correct": "Хватит! Ты узнал мой секрет! С {0} оставшимися попытками!", 10 | "numguess-oot": "Попытки кончились! Удачи в другое время! Секретное число было {0}." 11 | } -------------------------------------------------------------------------------- /i18n/numguess/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "numguess-intro": "唉! 我是恐懼海盜羅伯茨,而我有個秘密!\n我的秘密是一個數字,最少 {0},最大 {1}。我會給你 {2} 次機會。\n發一個數字來猜一猜。", 3 | "numguess-guess": "你想猜甚麼呢,伙計?", 4 | "numguess-timeout": "你這個愛好土地的拭子在 {0} 秒的時間內都沒有猜甚麼!你不能繼續跟我玩了!", 5 | "numguess-oor": "超出範圍了,你這個拭子!", 6 | "numguess-low": "太低了,你這個患壞血病的狗!", 7 | "numguess-high": "太高了,你這個土地愛好者!", 8 | "numguess-range": "\n你的範圍為 {0} 至 {1};你還剩下 {2} 次機會。", 9 | "numguess-correct": "終止!你猜到了!你發現了我的秘密!而你還剩下 {0} 次機會!", 10 | "numguess-oot": "沒有多一次機會了,伙計!下次祝你好運!我的秘密數字是 {0}。" 11 | } 12 | -------------------------------------------------------------------------------- /i18n/place/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd-desc": "[/r/place](https://reddit.com/r/place), but on Discord. Run `{0}help place.`", 3 | "cmd-help": "Run `{0}place get` to get the place image at that moment. Run `{0}help place set` for its usage", 4 | "get-desc": "Get the place image. Specify `x` and `y` to get the 100x100 portion of the image around that pixel only.", 5 | "set-desc": "Set the color of a pixel `x` from the left and `y` from the top to the RGB color `r`, `g`, `b`.", 6 | "coord-error": "Invalid coordinates {0},{1}", 7 | "color-error": "Invalid RGB {0},{1},{2}", 8 | "confirm-title": "Confirm", 9 | "confirm": "Is this pixel change correct?", 10 | "set": "Set pixel at ({0}, {1}) to ({2}, {3}, {4})", 11 | "cancelled-title": "Cancelled", 12 | "cancelled": "Cancelled setting pixel." 13 | } 14 | -------------------------------------------------------------------------------- /i18n/regexes/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Regex commands - Python flavored.", 3 | "regex-desc": "Regex functions! Run `{0}help regex`.", 4 | "search-desc": "Make a Python-flavored regex search! All groups are shown.", 5 | "findall-desc": "Use a Python-flavor regex to find all occurences of a pattern!", 6 | "search-result": "```\nGroups:\n{0}\n{1}\n```", 7 | "search-error": "```\nError in flags or expression.\n```", 8 | "search-result-nomatch": "```\nNo match :(\n```", 9 | "findall-result": "```\nResults:\n{0}```", 10 | "findall-gp": "Gp{0}", 11 | "findall-error": "Error in flags or expression.\n", 12 | "findall-result-none": "No results :(\n" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/regexes/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "search-result": "```\nGroupes :\n{0}\n{1}\n```", 3 | "search-error": "```\nErreur dans les drapeaux ou dans l'expression.\n```", 4 | "search-result-nomatch": "```\nPas trouvé :(\n```", 5 | "findall-result": "```\nRésultats :\n{0}```", 6 | "findall-gp": "Gp{0}", 7 | "findall-error": "Erreur dans les drapeaux ou dans l'expression.\n", 8 | "findall-result-none": "Aucun résultat :(\n" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/regexes/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "search-result": "```\nグループ:\n{0}\n{1}\n```", 3 | "search-error": "```\n式に誤りがあります。\n```", 4 | "search-result-nomatch": "```\nマッチしないみたいです。 :(\n```", 5 | "findall-result": "```\n結果:\n{0}```", 6 | "findall-gp": "Gp{0}", 7 | "findall-error": "式に誤りがあります。\n", 8 | "findall-result-none": "結果なし :(\n" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/regexes/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "search-result": "```\nГруппы:\n{0}\n{1}\n```", 3 | "search-error": "```\nОшибка в флагах или выражении.\n```", 4 | "search-result-nomatch": "```\nНе совпадает :(\n```", 5 | "findall-result": "```\nРезультаты:\n{0}```", 6 | "findall-gp": "Gp{0}", 7 | "findall-error": "Ошибка в флагах или выражении.\n", 8 | "findall-result-none": "Нет результатов :(\n" 9 | } -------------------------------------------------------------------------------- /i18n/regexes/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "search-result": "```\n組別:\n{0}\n{1}\n```", 3 | "search-error": "```\nError in flags or expression.\n```", 4 | "search-result-nomatch": "```\n沒有配合 :(\n```", 5 | "findall-result": "```\n結果:\n{0}```", 6 | "findall-gp": "第 {0} 組", 7 | "findall-error": "Error in flags or expression.\n", 8 | "findall-result-none": "沒有結果 :(\n" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "qqq": "русский язык", 3 | "hello": "Привет Мир!", 4 | "hmmst": "Хмм…", 5 | "whoami-title": "Пользователская информация для {0}", 6 | "whoami-description": "Вот информация о {0}", 7 | "whoami-status": "Статус", 8 | "whoami-activity": "Активность", 9 | "whoami-id": "ID", 10 | "whoami-created-at": "Создал аккаунт в", 11 | "whoami-joined-at": "Присоединился в", 12 | "whoami-roles": "Роли", 13 | "prefix-reset": "Успешно сброшен префикс для {0}", 14 | "prefix-set": "Успешно установлен префикс `{1}` для {0}", 15 | "resetprefix": "Успешно сброшен префикс для {0}", 16 | "purge": "Очищено {0} сообщений", 17 | "votetoban-ping-admin": "{0}, кто-то просит, чтобы был заблокирован {1}", 18 | "votetoban-msg": "**Голосование на блокировку {0}**\nПоставьте реакцию {1}, если вы голосуете за блокировку; поставьте реакцию {2}, если нет.", 19 | "votetoban-cancelled": "Администратор онлайн! Голосование было томенено. Please ask them instead.", 20 | "votetoban-few": "Проголосовало недостаточно людей! (всего {0}, минимум 3.) Пользователь остаётся.", 21 | "votetoban-banned": "{0} голосов за и {1} голосов против. Пользователь заблокирован.", 22 | "votetoban-ban-reason": "За блокировку {0}, против {1} когда администраторы ушли.", 23 | "votetoban-innocent": "{0} голосов за и {1} голосов против. Пользователь остаётся." 24 | } 25 | -------------------------------------------------------------------------------- /i18n/scratch/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Scratch-related commands.", 3 | "scratch-desc": "Scratch-related commands. Run `{0}help scratch`.", 4 | "randomproject-desc": "Get a random project link!", 5 | "messagecount-desc": "How many messages do you have on Scratch?", 6 | "news-desc": "Get Scratch news.", 7 | "messagecount-failed": "Couldn't get message count for {0}", 8 | "messagecount-title": "Message Count", 9 | "messagecount": "{0} has {1} message(s)", 10 | "randomproject-link": "Link", 11 | "http-error": "API returned HTTP error" 12 | } 13 | -------------------------------------------------------------------------------- /i18n/scratch/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "messagecount-failed": "Impossible de vérifier le nombre de messages de {0}", 3 | "messagecount": "{0} a {1} message(s)" 4 | } 5 | -------------------------------------------------------------------------------- /i18n/scratch/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "messagecount-failed": "{0}のメッセージが取得できません。", 3 | "messagecount-title": "メッセージ数", 4 | "messagecount": "{0} のメッセージ数は {1} です。", 5 | "randomproject-link": "[リンク]({0})" 6 | } 7 | -------------------------------------------------------------------------------- /i18n/scratch/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "messagecount-failed": "Не удалось получить количество сообщений для {0}", 3 | "messagecount": "У {0} {1} сообщение(ий)" 4 | } -------------------------------------------------------------------------------- /i18n/scratch/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "messagecount-failed": "不能發現 {0} 有幾條信息", 3 | "messagecount": "{0} 有 {1} 條信息" 4 | } 5 | -------------------------------------------------------------------------------- /i18n/server/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "404;h1": "404 Not Found", 3 | "404;p": "No idea what you're looking for. ._.", 4 | "404;back": "Back to the homepage", 5 | "index;h1": "Welcome, {0}", 6 | "index;settings": "Change your settings", 7 | "index;servers": "Change server settings", 8 | "notloggedin;h1": "Not Logged In", 9 | "notloggedin;p": "I need to know who you are before I can let you do things.", 10 | "notloggedin;login": "Authorize with Discord to continue", 11 | "server;h1": "Settings for {0}", 12 | "server;save": "Save", 13 | "server;back": "Back", 14 | "server;channel": "Channel", 15 | "server;language": "Language", 16 | "server;command": "Command", 17 | "server;disabled": "Disabled?", 18 | "server;cog": "Cog", 19 | "servers;h1": "Servers", 20 | "servers;div": "Choose a server to manage below.", 21 | "settings;h1": "Settings", 22 | "settings;prefix": "Your command prefix", 23 | "settings;lang": "Your language", 24 | "lang-auto": "Auto", 25 | "lang-none": "None", 26 | "ping-message": "Message for:" 27 | } 28 | -------------------------------------------------------------------------------- /i18n/server/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "404;h1": "404 ページが見つからないぞう", 3 | "404;p": "ページが見つからないぞう。何を探しているの?", 4 | "404;back": "トップに戻る", 5 | "index;h1": "{0}、めんそーれ!", 6 | "index;settings": "あなたの設定を変更する", 7 | "index;servers": "サーバー設定を変更する", 8 | "notloggedin;h1": "未ログイン", 9 | "notloggedin;p": "始める前に、ログインしましょう。", 10 | "notloggedin;login": "Discord認証を行う", 11 | "server;h1": "{0}の設定", 12 | "server;save": "保存", 13 | "server;back": "戻る", 14 | "server;channel": "チャンネル", 15 | "server;language": "言語", 16 | "servers;h1": "サーバー", 17 | "servers;div": "管理するサーバーを選択してください。", 18 | "settings;h1": "設定", 19 | "settings;prefix": "コマンドの接頭辞", 20 | "settings;lang": "言語", 21 | "lang-auto": "自動", 22 | "lang-none": "なし", 23 | "ping-message": "メッセージ通知:" 24 | } 25 | -------------------------------------------------------------------------------- /i18n/server/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "404;h1": "404 找不到", 3 | "404;p": "完全不知道你在找甚麼。._.", 4 | "404;back": "回去主頁", 5 | "index;h1": "歡迎,{0}", 6 | "index;settings": "改變你自己的設定", 7 | "index;servers": "改變一個伺服器的設定", 8 | "notloggedin;h1": "未登入", 9 | "notloggedin;p": "在你做任何東西之前,我要知道你是誰。", 10 | "notloggedin;login": "以 Discord 登入", 11 | "server;h1": "{0} 的設定", 12 | "server;save": "儲存", 13 | "server;back": "回去", 14 | "server;channel": "頻道", 15 | "server;language": "語言", 16 | "servers;h1": "伺服器", 17 | "servers;div": "請選擇以下的伺服器之一來改變設定。", 18 | "settings;h1": "設定", 19 | "settings;prefix": "你的命令字首", 20 | "settings;lang": "你的語言", 21 | "lang-auto": "自動", 22 | "lang-none": "不設", 23 | "ping-message": "消息為了:" 24 | } 25 | -------------------------------------------------------------------------------- /i18n/setgame/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Play Set!", 3 | "table-title": "Table", 4 | "table": "Below are the cards on the table. You have **{0}** points.", 5 | "instructions-title": "Instructions", 6 | "instructions": "If you see a set, send three comma-separated coordinates of cards.\nThe columns are A, B, and C from left to right, and the rows start at 1 at the top.\nFor example, if the top left, top middle, and top right cards form a set, send `a1, b1, c1`;\nif the first three cards on the left form a set, send `a1, a2, a3`. (no quotes).", 7 | "nosets": "There are no sets in this table. Drawing three more cards...", 8 | "set-called-title": "Set Called", 9 | "set-called": "{0} has found a set: {1}\nThey have gained a point.", 10 | "added-points-title": "Points Added", 11 | "added-points": "You now have **{0}** points.", 12 | "timed-out": "The game has ended due to inactivity. If you were still playing, that means y'all gotta up your set game.", 13 | "setgame-cmd-desc": "Play Set, a game of logic! Run `{0}help setgame` for rules.", 14 | "setgame-cmd-help": "Game rules:\n\n**Concepts**\nSet has 81 cards in its deck. Each card has 4 attributes: color (red, green, or blue); number (1, 2, or 3); shape (circle, square, or octagon); and shade (hollow, filled, or X).\nA set is a combination of 3 cards where, for each attribute, the attribute is either the same across all 3 cards, or different across all three.\nFor example, a triplet of 1, 2, and 3 solid blue octagons is the same in all attributes except number, where it is all different. Therefore, it forms a set. 1, 2, and 2 solid blue octagons, however, is the same in 3 attributes, but the 4th (again, number) is the same in 2 but different in 1 of the cards. Therefore, it does not form a set.\n\n**Initialization**\n12 cards are dealt to the table. If no sets are possible, 3 more cards are automatically dealt. This goes on until at least one set is possible.\n\n**Gameplay**\nWhen you find a set, send the three coordinates separated by commas and/or spaces, where the leftmost column is A, middle column is B, rightmost column is C, and rows start from the top at 1.\nIf it is valid, you will get a point, and cards will be dealt to the table until a) the number of cards on the table is 12, or there is at least 1 possible set, whichever comes last, or b) the deck runs out.\n\n**Ending**\nRounds continue until the deck runs out AND no more sets are possible.\nOnce the game ends, whoever has the most points wins.", 15 | "setgame-join-desc": "Join a game of Set!", 16 | "setgame-leave-desc": "Leave a game of Set.", 17 | "setgame-start-desc": "Start (or vote to start) your game of Set." 18 | } 19 | -------------------------------------------------------------------------------- /i18n/uno/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-desc": "Play UNO!", 3 | "uno-cmd-desc": "Play UNO!", 4 | "uno-cmd-help": "Run `{0}uno help` for information about the set of rules used here.", 5 | "uno-join-desc": "Join a game of UNO!", 6 | "uno-leave-desc": "Leave your game of UNO.", 7 | "uno-start-desc": "Start (or vote to start) the game of UNO!", 8 | "uno-help-desc": "Get information about the version of UNO this bot lets you play.", 9 | "uno-help": "In this version, every time you empty your hand you get 10 points.\nOnce your hand runs out, you refill it with 7 more cards to continue playing.\nWhen the deck runs out, you still continue to play until nobody can make a move.\nOnce that has happened, any cards still in your hand are subtracted from your points, where non-number cards are worth 10.", 10 | "hand-title": "Your Hand", 11 | "hand": "On the left is the top card of the discard pile; on the right is your current hand. You have **{0}** points.", 12 | "card-numbers-title": "Card Numbers", 13 | "card-numbers": "The leftmost card in your hand (not the discard card, which is all the way on the left) is numbered 1, the second-to-left 2, and so on.\nIf you like, you can also do the same from the right using negative numbers - rightmost card is -1, second-to-right is -2, and so on.", 14 | "waiting-for-card": "Send the number of a card in your hand (e.g. 7 or -3) to play it.", 15 | "choose-color-title": "Choose a Color", 16 | "choose-color": "Click the heart with the color you want to set the game to.", 17 | "turn-title": "Next Turn", 18 | "turn": "It is now {0}'s turn.", 19 | "next-turn": "{0} drew and couldn't play, so it is now {1}'s turn.", 20 | "uno-title": "Uno!", 21 | "uno": "{0} has one card left!", 22 | "empty-title": "Hand Emptied", 23 | "empty": "{0} has emptied their hand and gained 10 points!", 24 | "uno-timed-out-title": "Timed Out", 25 | "uno-timed-out": "You didn't play a card for {0} seconds! You have been removed from the game.", 26 | "cannot-turn": "After drawing a card, you still can't play any cards. Your turn has been skipped.", 27 | "card-played-title": "Card Played", 28 | "card-played": "Below is the card that {0} played:", 29 | "cards-drawn-title": "Cards Drawn", 30 | "cards-drawn": "Here are the cards you drew:", 31 | "uno-winners-title": "Winner(s)", 32 | "winners": "Here are the winners:\n{0}", 33 | "points": "Other players:", 34 | "point": "{0}: {1} points" 35 | } 36 | -------------------------------------------------------------------------------- /i18n/wiki/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-description": "Wiki-related commands.", 3 | "login-description": "Login to a Wiki. **MUST BE IN DMS**.", 4 | "edit-description": "Edit a Wiki page.", 5 | "page-description": "Get the contents of a page.", 6 | "randompage-description": "Get a link to a random Wiki page.", 7 | "iwstats-description": "Get statistics for the international wikis.", 8 | "stats-description": "Get stats for the ``wiki``wiki.", 9 | "analyzega-description": "Analysis of GA stats.", 10 | "patrol-description": "Patrol recent changes through Discord.", 11 | "patrol-help": "Run without parameters to get recent unpatrolled changes.\nRun with one parameter to specify ranges of **recent change** IDs to patrol, e.g. `282698-282700,282702,282706-` to patrol IDs 282698-282700, 282702, and 282706-latest.", 12 | "description": "A bot with Scratch Wiki-related commands.", 13 | "page-failed": "Fetching page content failed. Sorry!", 14 | "iwstats-failed": "Fetching stats failed. Oops!", 15 | "iwstats-title": "{0}wiki Stats", 16 | "iwstats-description": "Here are stats for the {0}wiki.", 17 | "iwstats-time": "Time", 18 | "iwstats-pages": "Pages", 19 | "iwstats-articles": "Articles", 20 | "iwstats-edits": "Edits", 21 | "iwstats-images": "Images", 22 | "iwstats-users": "Users", 23 | "iwstats-activeusers": "Active Users", 24 | "iwstats-admins": "Admins", 25 | "iwstats-jobs": "Jobs", 26 | "iwstats-queued-massmessages": "Queued MassMessages", 27 | "wikistats-failed": "Fetching stats failed. You likely specified a nonexisitent wiki.", 28 | "analyzega-views": "{0} views", 29 | "analyzega-times": "{0} times", 30 | "analyzega-views-title": "Views", 31 | "analyzega-views-per-pages": "{0} views per 2 pages", 32 | "analyzega-times-per-pages": "{0} times per 2 pages", 33 | "analyzega-total-title": "Total stats", 34 | "analyzega-total-description": "Total statistics overall", 35 | "analyzega-total-appp": "Average pageviews per page", 36 | "analyzega-total-mppp": "Median pageviews per page", 37 | "analyzega-total-adbp": "Average difference between pageviews", 38 | "analyzega-total-mdbp": "Median difference between pageviews", 39 | "analyzega-total-amov": "Average multiple of views", 40 | "analyzega-total-mmov": "Median multiple of views", 41 | "analyzega-total-tp": "Total pageviews", 42 | "analyzega-highest-title": "Stats for highest datapoint: {0}", 43 | "analyzega-highest-description": "Stats for the highest-ranked page", 44 | "analyzega-highest-puavb": "Pulls up average viewcount by", 45 | "analyzega-highest-dtnh": "Difference to next highest, {0}", 46 | "analyzega-highest-puadb": "Pulls up average difference by", 47 | "analyzega-highest-monh": "Multiple of next highest, {0}", 48 | "analyzega-highest-monh-value": "{0} is {1} times more popular", 49 | "analyzega-lowest-title": "Stats for lowest datapoint: {0}", 50 | "analyzega-lowest-description": "Stats for the lowest-ranked page", 51 | "analyzega-lowest-pdavb": "Pulls down average viewcount by", 52 | "analyzega-lowest-dtnl": "Difference to next lowest, {0}", 53 | "analyzega-lowest-pdadb": "Pulls down average difference by", 54 | "analyzega-lowest-fonl": "Fraction of next lowest, {0}", 55 | "analyzega-lowest-fonl-value": "{0} is {1} times more popular", 56 | "analyzega-median-title1": "Stats for median datapoint: {0}", 57 | "analyzega-median-description1": "Stats for the middle-ranked page", 58 | "analyzega-median-title2": "Stats for median datapoints: {0} and {1}", 59 | "analyzega-median-description2": "Stats for the middle-ranked pages", 60 | "analyzega-median-views": "{0} and {1}", 61 | "analyzega-median-cavb": "Changes average viewcount by", 62 | "analyzega-median-cadb": "Changes average difference by", 63 | "analyzega-median-camb": "Changes average multiple by", 64 | "notloggedin": "This command can only be run when you are logged in. Run `;wiki login \"\" ` in a DM to login.", 65 | "edit-instructions": "Send content snippets ```encapsulated in triple backquotes``` to add them to your edit. Send the exact text `EOF` to finish and submit the edit.", 66 | "edit-summary": "Send your edit summary:", 67 | "edit-result-title": "Edit Result", 68 | "edit-result": "Edit: {0}", 69 | "login-notdm": "This command is DM-only!", 70 | "login-notdm-nodelete": "This command is DM-only! Delete the command message now!", 71 | "login-notwiki": "Logging in failed: You specified a nonexistent wiki.", 72 | "login-failed": "Logging in failed: {0}", 73 | "login-status-title": "Login Status", 74 | "login-status": "Login: {0}\nYou should probably delete the command message now, just to be extra safe.", 75 | "patrol-missingperm": "You are not allowed to patrol edits.", 76 | "patrol-error": "An error occurred while patrolling. Some of the requested changes may have been patrolled, however.", 77 | "patrol-success": "Patrolled all requested changes." 78 | } 79 | -------------------------------------------------------------------------------- /i18n/wiki/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "page-failed": "Echec lors de la récupération du contenu de la page. Désolé !", 3 | "iwstats-failed": "Echec lors de la récupération des statistiques. Oups!", 4 | "iwstats-title": "{0}statistiques du wiki", 5 | "iwstats-description": "Voici les statistiques du wiki {0}.", 6 | "iwstats-time": "Temps", 7 | "iwstats-pages": "Pages", 8 | "iwstats-articles": "Articles", 9 | "iwstats-edits": "Modifications", 10 | "iwstats-images": "Images", 11 | "iwstats-users": "Utilisateurs", 12 | "iwstats-activeusers": "Utilisateurs actifs", 13 | "iwstats-admins": "Admins", 14 | "iwstats-jobs": "Travail", 15 | "wikistats-failed": "Echec lors de la récupération des statistiques. Vous avez certainement spcéifié un wiki qui n'existe pas.", 16 | "analyzega-views": "{0} vues", 17 | "analyzega-times": "{0} fois", 18 | "analyzega-views-title": "Views", 19 | "analyzega-views-per-pages": "{0} vues pour 2 pages", 20 | "analyzega-times-per-pages": "{0} fois pour 2 pages", 21 | "analyzega-total-title": "Statistiques totaux", 22 | "analyzega-total-description": "Total des statistiques globales", 23 | "analyzega-total-appp": "Moyenn de vues par page", 24 | "analyzega-total-mppp": "Médiane de vues par page", 25 | "analyzega-total-adbp": "Etendue moyenne entre le nombre de vues des pages", 26 | "analyzega-total-mdbp": "Etendue médiane entre le nombre de vues des pages", 27 | "analyzega-total-amov": "Moyenne des vues multiples", 28 | "analyzega-total-mmov": "Médiane des vues multiples", 29 | "analyzega-total-tp": "Nombre total de vues de la page", 30 | "analyzega-highest-title": "Statistiques du point de données le plus haut : {0}", 31 | "analyzega-highest-description": "Statistiques de la page la mieux classée", 32 | "analyzega-highest-puavb": "Augmente la moyenne de vues de", 33 | "analyzega-highest-dtnh": "Différence avec le suivant le plus élevé, {0}", 34 | "analyzega-highest-puadb": "Augmente la diffférence moyenne de", 35 | "analyzega-highest-monh": "Multiple du suivant le plus élevé, {0}", 36 | "analyzega-highest-monh-value": "{0} est {1} fois plus populaire", 37 | "analyzega-lowest-title": "Statistiques pour le point de données le plus bas : {0}", 38 | "analyzega-lowest-description": "Statistiques pour la page la moins bien classée", 39 | "analyzega-lowest-pdavb": "Réduit la moyenne de vues de", 40 | "analyzega-lowest-dtnl": "Différence avec le suivant le moins élevé, {0}", 41 | "analyzega-lowest-pdadb": "Réduit la différence moyenne de", 42 | "analyzega-lowest-fonl": "Fraction du suivant le moins élevé, {0}", 43 | "analyzega-lowest-fonl-value": "{0} est {1} fois moins populaire", 44 | "analyzega-median-title1": "Statistiques pour le point de données médian : {0}", 45 | "analyzega-median-description1": "Statistiques pour la page au classement le plus moyen", 46 | "analyzega-median-title2": "Statistiques pour les points de données médians: {0} et {1}", 47 | "analyzega-median-description2": "Statistiques pour les pages au classement le plus moyen", 48 | "analyzega-median-views": "{0} et {1}", 49 | "analyzega-median-cavb": "Change le nombre moyen de vues de", 50 | "analyzega-median-cadb": "Change l'étendue moyenne de", 51 | "analyzega-median-camb": "Change le multiple moyen de" 52 | } 53 | -------------------------------------------------------------------------------- /i18n/wiki/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "page-failed": "なぜか知らないけど失敗しました。", 3 | "iwstats-failed": "なぜか知らないけど失敗しました。 おっとっと!", 4 | "iwstats-title": "{0}wiki 情報", 5 | "iwstats-description": "{0}wikiの情報です。", 6 | "iwstats-time": "時刻", 7 | "iwstats-pages": "ページ数", 8 | "iwstats-articles": "記事数", 9 | "iwstats-edits": "編集数", 10 | "iwstats-news": "ニュース", 11 | "iwstats-images": "画像数", 12 | "iwstats-users": "ユーザー数", 13 | "iwstats-activeusers": "活動者数", 14 | "iwstats-admins": "管理者数", 15 | "iwstats-jobs": "ジョブ数", 16 | "iwstats-queued-massmessages": "MassMessage キュー", 17 | "wikistats-failed": "エラーが発生しました。たぶんウィキを間違えています。", 18 | "analyzega-views": "{0} 閲覧", 19 | "analyzega-times": "{0} 回", 20 | "analyzega-views-title": "閲覧数", 21 | "analyzega-views-per-pages": "2ページ当たり{0} 閲覧", 22 | "analyzega-times-per-pages": "2ページ当たり{0} 回", 23 | "analyzega-total-title": "全体", 24 | "analyzega-total-description": "概要", 25 | "analyzega-total-appp": "ページあたり平均", 26 | "analyzega-total-mppp": "中央値", 27 | "analyzega-total-adbp": "平均値の差", 28 | "analyzega-total-mdbp": "中央値の差", 29 | "analyzega-total-amov": "平均値の倍率", 30 | "analyzega-total-mmov": "中央値の倍率", 31 | "analyzega-total-tp": "合計閲覧数", 32 | "analyzega-highest-title": "最大閲覧数の記事: {0}", 33 | "analyzega-highest-description": "最大ランクの記事の情報", 34 | "analyzega-highest-puavb": "平均への影響", 35 | "analyzega-highest-dtnh": "2位の {0} との差", 36 | "analyzega-highest-puadb": "ページごと平均への影響", 37 | "analyzega-highest-monh": "2位の {0} より何倍か", 38 | "analyzega-highest-monh-value": "{0} は {1} 倍人気です", 39 | "analyzega-lowest-title": "最少閲覧数の記事: {0}", 40 | "analyzega-lowest-description": "最小ランクの記事の情報", 41 | "analyzega-lowest-pdavb": "平均への影響", 42 | "analyzega-lowest-dtnl": "ワースト2位の {0} との差", 43 | "analyzega-lowest-pdadb": "ページごと平均への影響", 44 | "analyzega-lowest-fonl": "ワースト2位の {0} より何倍か", 45 | "analyzega-lowest-fonl-value": "{0} は {1} 倍人気です", 46 | "analyzega-median-title1": "中央値: {0}", 47 | "analyzega-median-description1": "中央の情報", 48 | "analyzega-median-title2": "中央のページ: {0} と {1}", 49 | "analyzega-median-description2": "中央に来たページの情報", 50 | "analyzega-median-views": "{0} と {1}", 51 | "analyzega-median-cavb": "平均への影響", 52 | "analyzega-median-cadb": "ページごと平均への影響", 53 | "analyzega-median-camb": "平均倍率への影響", 54 | "notloggedin": "ログインしていません。`;login <ウィキ2文字コード> \"<ユーザー名>\" <パスワード>` をDMで送ってください。", 55 | "edit-instructions": "コードを ```このようにして``` 送信します。 `EOF` と送ると編集を終了し、送信します。", 56 | "edit-summary": "編集要約を送る:", 57 | "edit-result-title": "編集結果", 58 | "edit-result": "編集: {0}", 59 | "login-notdm": "DMで使いなさい!", 60 | "login-notdm-nodelete": "DMで使いなさい! コマンドも消しなさい!", 61 | "login-notwiki": "そんなウィキないよ。", 62 | "login-failed": "ログイン失敗: {0}", 63 | "login-status-title": "ログイン状態", 64 | "login-status": "ログイン: {0} コメントを削除してください。" 65 | } 66 | -------------------------------------------------------------------------------- /i18n/wiki/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "page-failed": "Не удалось получить содержимое страницы.", 3 | "iwstats-failed": "Упс! Не удалось получить статистику.", 4 | "iwstats-title": "Статистика {0} Вики", 5 | "iwstats-description": "Вот статистика для {0} Вики.", 6 | "iwstats-time": "Время", 7 | "iwstats-pages": "Страницы", 8 | "iwstats-articles": "Статьи", 9 | "iwstats-edits": "Правки", 10 | "iwstats-images": "Картинки", 11 | "iwstats-users": "Пользователи", 12 | "iwstats-activeusers": "Активные пользователи", 13 | "iwstats-admins": "Аднинистраторы", 14 | "iwstats-jobs": "Работы", 15 | "wikistats-failed": "Не удалось получить статистику. Возможно, вы указали несуществующую Вики.", 16 | "analyzega-views": "{0} просмотров", 17 | "analyzega-times": "{0} времени", 18 | "analyzega-views-title": "Просмотры", 19 | "analyzega-views-per-pages": "{0} просмотров на 2 страницы", 20 | "analyzega-times-per-pages": "{0} времени на 2 страницы", 21 | "analyzega-total-title": "Общая статистика", 22 | "analyzega-total-description": "Общая статистика в целом", 23 | "analyzega-total-appp": "Среднее количество просмотров на страницу", 24 | "analyzega-total-mppp": "Среднее число просмотров на страницу", 25 | "analyzega-total-adbp": "Средняя разница между просмотрами страниц", 26 | "analyzega-total-mdbp": "Средняя разница между просмотрами страниц", 27 | "analyzega-total-amov": "Среднее количество просмотров", 28 | "analyzega-total-mmov": "Среднее число просмотров", 29 | "analyzega-total-tp": "Общее количество просмотров страниц", 30 | "analyzega-highest-title": "Статистика для самой просматриваемой страницы: {0}", 31 | "analyzega-highest-description": "Статистика для самой просматриваемой страницы", 32 | "analyzega-highest-puavb": "Увеличивает средний показатель просмотров на", 33 | "analyzega-highest-dtnh": "Разница до следующей по количеству посмотров страницы, {0}", 34 | "analyzega-highest-puadb": "Увеличивает среднюю разнцу просмотра на", 35 | "analyzega-highest-monh": "Разница до следующей по количеству посмотров страницы, {0}", 36 | "analyzega-highest-monh-value": "{0} в {1} раз популярнее", 37 | "analyzega-lowest-title": "Статистика для наименее просматриваемой страницы: {0}", 38 | "analyzega-lowest-description": "Статистика для наименее просматриваемой страницы", 39 | "analyzega-lowest-pdavb": "Уменьшает средний показатель просмотров на", 40 | "analyzega-lowest-dtnl": "Разница до следующей по наименьшему количеству посмотров страницы, {0}", 41 | "analyzega-lowest-pdadb": "Уменьшает среднюю разнцу просмотра на", 42 | "analyzega-lowest-fonl": "Разница до следующей по наименьшему количеству посмотров страницы, {0}", 43 | "analyzega-lowest-fonl-value": "{0} в {1} раз популярнее", 44 | "analyzega-median-title1": "Статистика для средней по просмотрам страницы: {0}", 45 | "analyzega-median-description1": "Статистика для средней по просмотрам страницы", 46 | "analyzega-median-title2": "Статистика для средних по просмотрам страниц: {0} и {1}", 47 | "analyzega-median-description2": "Статистика для средних по просмотрам страниц", 48 | "analyzega-median-views": "{0} и {1}", 49 | "analyzega-median-cavb": "Изменяет среднее число просмотров на", 50 | "analyzega-median-cadb": "Изменяет среднюю разницу просмотров на", 51 | "analyzega-median-camb": "Изменяет среднее число просмотров на" 52 | } -------------------------------------------------------------------------------- /i18n/wiki/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "page-failed": "發現頁面內容失敗。對不起!", 3 | "iwstats-failed": "發現數據失敗。哎呀!", 4 | "iwstats-title": "「{0}」維基數據", 5 | "iwstats-description": "以下是「{0}」維基的數據。", 6 | "iwstats-time": "時刻", 7 | "iwstats-pages": "頁量", 8 | "iwstats-articles": "內容頁數", 9 | "iwstats-edits": "編輯次數", 10 | "iwstats-images": "圖片數", 11 | "iwstats-users": "用戶數量", 12 | "iwstats-activeusers": "活動用戶數量", 13 | "iwstats-admins": "管理員數量", 14 | "iwstats-jobs": "工作量", 15 | "wikistats-failed": "發現數據失敗。你應該要求了一個不存在的維基。", 16 | "analyzega-views": "{0} 次", 17 | "analyzega-times": "{0} 倍", 18 | "analyzega-views-title": "觀看次數", 19 | "analyzega-views-per-pages": "{0} 次每兩頁", 20 | "analyzega-times-per-pages": "{0} 倍每兩頁", 21 | "analyzega-total-title": "整體數據", 22 | "analyzega-total-description": "以下為這維基的整體數據。", 23 | "analyzega-total-appp": "平均頁面觀看次數", 24 | "analyzega-total-mppp": "中度頁面觀看次數", 25 | "analyzega-total-adbp": "平均頁面觀看次數距離", 26 | "analyzega-total-mdbp": "中度頁面觀看次數距離", 27 | "analyzega-total-amov": "平均頁面觀看次數倍數", 28 | "analyzega-total-mmov": "中度頁面觀看次數倍數", 29 | "analyzega-total-tp": "總共觀看次數", 30 | "analyzega-highest-title": "最高觀看率頁面:《{0}》的數據", 31 | "analyzega-highest-description": "最高觀看率頁面的數據", 32 | "analyzega-highest-puavb": "有了這頁,平均觀看次數上升了", 33 | "analyzega-highest-dtnh": "距離至其次,《{0}》", 34 | "analyzega-highest-puadb": "有了這頁,平均觀看次數距離上升了", 35 | "analyzega-highest-monh": "這頁是其次,《{0}》的幾倍", 36 | "analyzega-highest-monh-value": "《{0}》比其次是 {1} 倍更受歡迎", 37 | "analyzega-lowest-title": "最低觀看率頁面:《{0}》的數據", 38 | "analyzega-lowest-description": "最低觀看率頁面的數據", 39 | "analyzega-lowest-pdavb": "有了這頁,平均觀看次數下降了", 40 | "analyzega-lowest-dtnl": "距離至其首,《{0}》", 41 | "analyzega-lowest-pdadb": "有了這頁,平均觀看次數距離下降了", 42 | "analyzega-lowest-fonl": "這也是其首,《{0}》的幾分", 43 | "analyzega-lowest-fonl-value": "《{0}》比這頁是 {1} 倍更受歡迎", 44 | "analyzega-median-title1": "中度觀看率頁面:《{0}》的數據", 45 | "analyzega-median-description1": "中度觀看率頁面的數據", 46 | "analyzega-median-title2": "中度觀看率頁面:《{0}》和《{1}》", 47 | "analyzega-median-description2": "中度觀看率頁面的數據", 48 | "analyzega-median-views": "{0} 和 {1}", 49 | "analyzega-median-cavb": "有了這頁,平均觀看次數轉變了", 50 | "analyzega-median-cadb": "有了這頁,平均觀看次數距離轉變了", 51 | "analyzega-median-camb": "有了這頁,平均觀看次數倍數轉變了" 52 | } 53 | -------------------------------------------------------------------------------- /i18n/words/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cog-description": "Words that rhyme with, mean, or sound like something (and more!)", 3 | "words-description": "Words that rhyme with, mean, or sound like something (and more!). Run `{0}help words`", 4 | "words-help": "`` can be one of:\n\n**`that rhyme with`**\n**`rhyme`**\n**`rhy`**\n**`nry`**\nWords that rhyme with a word.\n\n**`that mean`**\n**`means`**\n**`ml`**\nWords that mean something.\n\n**`that sound like`**\n**`sounds`**\n**`sl`**\nWords that sound like something.\n\n**`spelled like`**\n**`spelled`**\n**`sp`**\nWords that are spelled like something.\n\n**`modified by`**\n**`jja`**\nPopular nouns modified by the given adjective, per Google Books Ngrams.\n\n**`that modify`**\n**`modifying`**\n**`jjb`**\nPopular adjectives used to modify the given noun, per Google Books Ngrams.\n\n**`associated with`**\n**`triggered by`**\n**`trg`**\nWords that are statistically associated with the query word in the same piece of text.\n\n**`that follow`**\n**`following`**\n**`after`**\n**`bga`**\nWords that frequently follow the given word (per Google Books Ngrams).\n\n**`that precede`**\n**`preceding`**\n**`before`**\n**`bgb`**\nFrequent predecessors of the given word (per Google Books Ngrams).\n", 5 | "words-usage": ": ` or ` ` where `` is one word ` ", 6 | "synonyms-description": "Synonyms (per WordNet)", 7 | "antonyms-description": "Antonyms (per WordNet)", 8 | "hypernyms-description": "Hypernyms (words that are more general than the word, per WordNet)", 9 | "hyponyms-description": "Hyponyms (words that are more specific than the word, per WordNet)", 10 | "holonyms-description": "Holonyms (words that are a part of the word, per WordNet)", 11 | "meronyms-description": "Meronyms (words that the word is part of, per WordNet)", 12 | "homophones-description": "Homophones (words that sound alike)", 13 | "server-censor-title": "Censored words in {0} output (regex)", 14 | "syllable-count": "{0} syllable(s)", 15 | "perfect-rhymes": "Perfect Rhymes", 16 | "near-rhymes": "Near Rhymes", 17 | "means-title": "Words that Mean \"{0}\"", 18 | "sounds-title": "Words that Sound Like \"{0}\"", 19 | "spelled-title": "Words Spelled Like \"{0}\"", 20 | "jja-title": "Popular Nouns Modified by \"{0}\"", 21 | "jjb-title": "Popular Adjectives that Modify \"{0}\"", 22 | "syn-title": "Synonyms of \"{0}\"", 23 | "trg-title": "Words associated with \"{0}\"", 24 | "ant-title": "Antonyms of \"{0}\"", 25 | "spc-title": "(A) \"{0}\" is/are (a) kind(s) of:", 26 | "gen-title": "Kinds of \"{0}\"", 27 | "com-title": "Parts of (a) \"{0}\"", 28 | "par-title": "(A) \"{0}\" is/are (a) part(s) of:", 29 | "bga-title": "Words that follow \"{0}\"", 30 | "bgb-title": "Words that precede \"{0}\"", 31 | "hom-title": "Homophones of \"{0}\"", 32 | "cns-title": "Words that match consontants with \"{0}\"", 33 | "word-info": "Information about \"{0}\"", 34 | "word-root": "Root word: {0}", 35 | "word-pronunciation": "Pronunciation", 36 | "word-syllables": "Syllables", 37 | "word-frequency": "Occurrences/100M English words", 38 | "word-parts-of-speech": "Part(s) of speech", 39 | "word-definitions": "Definition(s)", 40 | "no-def": "No definition found for \"{0}\"" 41 | } 42 | -------------------------------------------------------------------------------- /i18n/zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "qqq": "繁體中文", 3 | "hello": "你好,世界!", 4 | "hmmst": "…", 5 | "whoami-title": "資料關於 {0}", 6 | "whoami-description": "以下是一些資料關於 {0}", 7 | "whoami-status": "狀況", 8 | "whoami-activity": "活動", 9 | "whoami-id": "編號", 10 | "whoami-created-at": "建立於", 11 | "whoami-joined-at": "加入於", 12 | "whoami-roles": "角色", 13 | "prefix-reset": "成功地為 {0} 重啟命令字首", 14 | "prefix-set": "成功地為 {0} 設置命令字首至 `{1}`", 15 | "resetprefix": "成功地重啟了 {0} 的命令字首", 16 | "purge": "清除了 {0} 條消息", 17 | "votetoban-ping-admin": "{0},有人要求封禁 {1}!", 18 | "votetoban-msg": "**投票封禁 {0}**\n反應 {1} 來投票封禁;反應 {2} 來投票保留。", 19 | "votetoban-cancelled": "一位管理員已上線!這輪投票已被取消。請問那位管理員。", 20 | "votetoban-few": "不夠人投了票!(總共 {0},最少需要三名。)那位成員已被保留。", 21 | "votetoban-banned": "{0} 票贊成,{1} 票反對。那位成員已被封禁。", 22 | "votetoban-ban-reason": "投票結果 {0} 票對 {1} 票,於是被封禁。", 23 | "votetoban-innocent": "{0} 票贊成,{1} 票反對。那位成員已被保留。" 24 | } 25 | -------------------------------------------------------------------------------- /kenny2automate/dbl07.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import discord 3 | from discord.ext.commands import group, Greedy 4 | from .games import Games 5 | from .i18n import embed 6 | from .utils import background, lone_group 7 | 8 | class Dbl07(Games): 9 | """007/cog-desc""" 10 | 11 | name = '007' 12 | coro = '_dbl07' 13 | maxim = 2 14 | minim = 2 15 | jcn = '007 join' 16 | 17 | @group(name='007', invoke_without_command=True, description='007/cmd-desc') 18 | @lone_group(True) 19 | async def dbl07(self, ctx): 20 | """007/cmd-help""" 21 | pass 22 | 23 | @dbl07.command(description='007/join-desc') 24 | async def join(self, ctx): 25 | await self._join_global_game(ctx) 26 | 27 | @dbl07.command(description='007/leave-desc') 28 | async def leave(self, ctx): 29 | await self._unjoin_global_game(ctx) 30 | 31 | @dbl07.command(description='007/here-desc') 32 | async def here(self, ctx, against: Greedy[discord.Member] = ()): 33 | try: 34 | players = await self._gather_multigame(ctx, against) 35 | except (TypeError, ValueError): 36 | return 37 | self._starting(ctx) 38 | await self._dbl07((players[0], players[1]), ()) 39 | 40 | async def _dbl07(self, ctxs, specs): 41 | LOAD, FIRE, PROTECT = ACTIONS = ( 42 | '\N{INBOX TRAY}', '\N{PISTOL}', '\N{SHIELD}' 43 | ) 44 | players = tuple(i.author for i in ctxs) 45 | deeta = tuple({'shields': 0, 'ammo': 0} for _ in range(2)) 46 | async def action(player): 47 | msg = await player.send(embed=embed(player, 48 | title=('007/action-title',), 49 | description=('007/action', *ACTIONS), 50 | color=0xffff00 51 | )) 52 | await asyncio.gather(*(msg.add_reaction(i) for i in ACTIONS)) 53 | r, u = await self.bot.wait_for('reaction_add', check=lambda r, u: ( 54 | r.emoji in ACTIONS 55 | and u.id == player.id 56 | and r.message.id == msg.id 57 | )) 58 | return r.emoji 59 | def ret_winner(acts, idx): 60 | if actions[idx] == FIRE: 61 | if deeta[idx]['ammo'] <= 0: 62 | return None 63 | # note: idx-1 can be negative, 64 | # but it still ends up being 65 | # whichever is the other item 66 | # in a 2-tuple 67 | if acts[idx-1] == LOAD: 68 | ret = idx 69 | if acts[idx-1] == FIRE: 70 | if deeta[idx]['ammo'] > deeta[idx-1]['ammo']: 71 | ret = idx 72 | elif deeta[idx]['ammo'] < deeta[idx-1]['ammo']: 73 | ret = idx-1 74 | else: 75 | ret = None # tie, continue 76 | deeta[idx-1]['ammo'] = 0 77 | if acts[idx-1] == PROTECT: 78 | if deeta[idx]['ammo'] > deeta[idx-1]['shields']: 79 | ret = idx 80 | else: 81 | ret = None 82 | deeta[idx-1]['shields'] = max(0, deeta[idx-1]['shields'] 83 | - deeta[idx]['ammo']) 84 | deeta[idx]['ammo'] = 0 85 | return ret 86 | if acts[idx] == LOAD: 87 | deeta[idx]['ammo'] += 1 88 | if acts[idx] == PROTECT: 89 | deeta[idx]['shields'] += 1 90 | return None 91 | def fields(pid): 92 | return sum((( 93 | (('007/player-' + ('you' if i == pid else 'them'),), actions[i], True), 94 | (('007/ammo-title',), str(deeta[i]['ammo']), True), 95 | (('007/shields-title',), str(deeta[i]['shields']), True) 96 | ) for i, play in enumerate(players)), ()) 97 | actions = (('none',),) * 2 98 | for pid, player in enumerate(players): 99 | background(player.send(embed=embed(player, 100 | title=('007/start-title',), 101 | description=('007/start',), 102 | fields=fields(pid), 103 | color=0xee00ee 104 | ))) 105 | winner = None 106 | while winner is None: 107 | actions = await asyncio.gather(*(action(i) for i in players)) 108 | if actions[1] == PROTECT: #shield comes first 109 | first, second = 1, 0 110 | else: 111 | first, second = 0, 1 112 | winner = ret_winner(actions, first) 113 | if winner is not None: 114 | break 115 | winner = ret_winner(actions, second) 116 | if winner is not None: 117 | break 118 | for pid, player in enumerate(players): 119 | background(player.send(embed=embed(player, 120 | title=('007/round-title',), 121 | description=('007/round',), 122 | fields=fields(pid), 123 | color=0xfffffe 124 | ))) 125 | winner %= 2 126 | msgs = await asyncio.gather(*(player.send(embed=embed(player, 127 | title=('007/game-over-title',), 128 | description=('007/you-' + ('lost' if winner != pid else 'won'),), 129 | fields=fields(pid), 130 | color=0xff0000 if winner != pid else 0x55acee, 131 | footer=('games/rematch',) 132 | )) for pid, player in enumerate(players))) 133 | await self._rematch(msgs, ctxs) 134 | -------------------------------------------------------------------------------- /kenny2automate/dms.py: -------------------------------------------------------------------------------- 1 | from functools import wraps 2 | import asyncio 3 | import discord 4 | from discord.ext import commands 5 | from .emoji import SEE_DM 6 | from .utils import DummyCtx, background 7 | from .i18n import i18n, embed 8 | 9 | def needs_dms(react=True): 10 | def wrapper(func): 11 | @wraps(func) 12 | async def replacement(*args, **kwargs): 13 | for arg in args + tuple(kwargs.values()): 14 | if isinstance(arg, (commands.Context, DummyCtx)): 15 | ctx = arg 16 | break 17 | else: 18 | return await func(*args, **kwargs) 19 | try: 20 | msg = await ctx.author.send(i18n(ctx.author, 'checking-dms')) 21 | except discord.Forbidden as exc: 22 | if exc.code == 50007: # "can't dm this user" 23 | background(ctx.send(embed=embed(ctx, 24 | title=('error',), 25 | description=('cant-dm', ctx.author.mention), 26 | color=0xff0000 27 | ))) 28 | raise 29 | async def waitanddel(): 30 | await asyncio.sleep(5) 31 | await msg.delete() 32 | background(waitanddel()) 33 | if react and hasattr(ctx, 'message'): 34 | background(ctx.message.add_reaction(SEE_DM)) 35 | return await func(*args, **kwargs) 36 | return replacement 37 | return wrapper 38 | 39 | async def check_dms_open(ctx): 40 | @needs_dms(react=False) 41 | async def dummy(context): 42 | return True 43 | try: 44 | return await dummy(ctx) 45 | except discord.Forbidden as exc: 46 | if exc.code == 50007: 47 | return False 48 | raise 49 | -------------------------------------------------------------------------------- /kenny2automate/emoji.py: -------------------------------------------------------------------------------- 1 | NUMBERS = tuple( 2 | '%s\N{VARIATION SELECTOR-16}\N{COMBINING ENCLOSING KEYCAP}' % i 3 | for i in range(10) 4 | ) + ('\N{KEYCAP TEN}',) 5 | LETTERS = tuple( 6 | chr(ord('\N{REGIONAL INDICATOR SYMBOL LETTER A}') + i) 7 | for i in range(26) 8 | ) 9 | 10 | PLUS = '\N{HEAVY PLUS SIGN}' 11 | CHECK = '\N{WHITE HEAVY CHECK MARK}' 12 | CROSS = '\N{NEGATIVE SQUARED CROSS MARK}' 13 | SHAKE = '\N{HANDSHAKE}' 14 | MAG = '\N{LEFT-POINTING MAGNIFYING GLASS}' 15 | CR0SS = '\N{CROSS MARK}' 16 | QUESTION = '\N{BLACK QUESTION MARK ORNAMENT}' 17 | 18 | SPADES = '<:spades:701646576153526353>' 19 | CLUBS = '<:clubs:701646604347637801>' 20 | HEARTS = '\N{BLACK HEART SUIT}' 21 | DIAMONDS = '\N{BLACK DIAMOND SUIT}' 22 | 23 | BLACK_SQUARE = '\N{BLACK LARGE SQUARE}' 24 | WHITE_SQUARE = '\N{WHITE LARGE SQUARE}' 25 | ZWSP = '\N{ZERO WIDTH SPACE}' 26 | 27 | BLUE_CIRCLE = '\N{LARGE BLUE CIRCLE}' 28 | RED_CIRCLE = '\N{LARGE RED CIRCLE}' 29 | 30 | SEE_DM = '<:see_dm:729737107811074157>' 31 | -------------------------------------------------------------------------------- /kenny2automate/eval_.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import re 3 | import traceback 4 | from contextlib import redirect_stdout 5 | import discord 6 | from discord.ext import commands 7 | from io import StringIO 8 | from .i18n import embed 9 | 10 | class Eval(commands.Cog): 11 | 12 | async def cog_check(self, ctx): 13 | return await ctx.bot.is_owner(ctx.author) 14 | 15 | @staticmethod 16 | def _init_env(ctx): 17 | def exit(*args): 18 | raise SystemExit(*args) 19 | env = { 20 | 'ctx': ctx, 21 | 'commands': commands, 22 | 'discord': discord, 23 | 'exit': exit, 24 | } 25 | out = StringIO() 26 | return env, out 27 | 28 | @staticmethod 29 | def _func_from_arg(arg, env): 30 | arg = arg.strip('`').rstrip().lstrip('\n').splitlines() 31 | indent = ' ' 32 | for line in arg: 33 | strp = line.lstrip() 34 | if strp != line: 35 | indent = line[:len(line) - len(strp)] 36 | break 37 | arg = ''.join(indent * 2 + line + '\n' for line in arg) 38 | globline = ', '.join(i for i in env.keys() if i not in { 39 | 'func', 'commands', 'discord', 'exit' 40 | }) 41 | arg = f'''{indent}try: 42 | {indent*2}global {globline} 43 | {arg} 44 | {indent}finally: 45 | {indent*2}globals().update(locals())''' 46 | arg = f"async def func():\n{arg}" 47 | exec(arg, env) 48 | return env['func'] 49 | 50 | @staticmethod 51 | def _trace(): 52 | return re.sub(r'".*?kenny2github\\', '"', traceback.format_exc(), re.I) 53 | 54 | @commands.command('eval', description='eval-desc') 55 | async def eval_(self, ctx, *, arg): 56 | env, out = self._init_env(ctx) 57 | func = self._func_from_arg(arg, env) 58 | try: 59 | with redirect_stdout(out): 60 | ret = await func() 61 | except SystemExit: 62 | await ctx.send(f'```\n{out.getvalue()}```') 63 | except BaseException: 64 | trace = self._trace() 65 | await ctx.send(f'```\n{out.getvalue()}```', embed=embed(ctx, 66 | title=('error',), 67 | description=f'```{trace}```', 68 | color=0xff0000 69 | )) 70 | else: 71 | await ctx.send(f'```\n{out.getvalue()}```', embed=embed(ctx, 72 | title=('success',), 73 | description=f'```{ret!r}```', 74 | color=0x55acee 75 | )) 76 | 77 | @commands.command('exec', aliases=['py'], description='exec-desc') 78 | async def exec_(self, ctx): 79 | env, out = self._init_env(ctx) 80 | await ctx.send(f'```\nPython {sys.version} on {sys.platform}\n>>>\n```') 81 | while 1: 82 | arg = (await ctx.bot.wait_for('message', check=lambda m: ( 83 | m.author.id == ctx.author.id 84 | and m.channel.id == ctx.channel.id 85 | ))).content 86 | out = StringIO() 87 | func = self._func_from_arg(arg, env) 88 | put = '' 89 | try: 90 | with redirect_stdout(out): 91 | ret = await func() 92 | except SystemExit: 93 | break 94 | except BaseException: 95 | put = self._trace() 96 | else: 97 | put = repr(ret) 98 | finally: 99 | put = (out.getvalue() + put + '\n>>>').splitlines() 100 | pages = commands.Paginator(prefix='```\n', suffix='\n```') 101 | for line in put: 102 | try: 103 | pages.add_line(line) 104 | except RuntimeError: #even the line was too long for one msg 105 | for i in range(0, len(line), 1990): 106 | pages.add_line(line[i:i+1990]) 107 | for page in pages.pages: 108 | await ctx.send(page) 109 | -------------------------------------------------------------------------------- /kenny2automate/fight/armors.json: -------------------------------------------------------------------------------- 1 | { 2 | "clothes": { 3 | "name": "fight/armor-clothes", 4 | "defense": 0, 5 | "price": 0 6 | }, 7 | "bandages": { 8 | "name": "fight/armor-bandages", 9 | "defense": 1, 10 | "price": 3 11 | }, 12 | "cloak": { 13 | "name": "fight/armor-cloak", 14 | "defense": 5, 15 | "price": 15 16 | }, 17 | "firesuit": { 18 | "name": "fight/armor-firesuit", 19 | "defense": "firesuit", 20 | "price": 30 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /kenny2automate/fight/data.py: -------------------------------------------------------------------------------- 1 | import random 2 | import json 3 | import os 4 | import discord.ext.commands as c 5 | from ..i18n import i18n 6 | from ..utils import dataclass as _dataclass 7 | 8 | @_dataclass 9 | class Weapon(object): 10 | name: str 11 | damage: (int, type(lambda:None)) 12 | price: int = None 13 | emoji: str = '\U0001f5e1' 14 | 15 | def nam(self, ctx): 16 | return '{} {}'.format(self.emoji, i18n(ctx, self.name)) 17 | 18 | @classmethod 19 | async def convert(cls, ctx, argument): 20 | if argument not in weapons: 21 | raise c.BadArgument('{!r} is not a valid weapon'.format(argument)) 22 | return weapons[argument] 23 | 24 | class RandomWeapon(object): 25 | def __get__(self, instance, owner): 26 | if instance is None: 27 | return self 28 | instance.weapon = random.choice(list(weapons.values())) 29 | return instance.weapon 30 | 31 | class DamageFuncs(object): 32 | @staticmethod 33 | def fangs(user, opponent): 34 | """fight/weapon-fangs-damage""" 35 | user.health += 1 36 | if isinstance(opponent.armor.defense, int): 37 | damage = max(0, 2 - opponent.armor.defense) 38 | else: 39 | damage = 2 40 | opponent.health -= damage 41 | return damage 42 | 43 | @staticmethod 44 | def bomb(user, opponent): 45 | """fight/weapon-bomb-damage""" 46 | if random.randint(1, 6) + random.randint(1, 6) >= 6: 47 | opponent.health -= 10 48 | return 10 49 | return 0 50 | 51 | with open(os.path.join(os.path.dirname(__file__), 'weapons.json')) as f: 52 | weapons = json.load(f) 53 | for name, value in weapons.items(): 54 | if isinstance(value['damage'], str): 55 | value['damage'] = getattr(DamageFuncs, value['damage']) 56 | weapons[name] = Weapon(**value) 57 | 58 | @_dataclass 59 | class Armor(object): 60 | name: str 61 | defense: (int, type(lambda:None)) 62 | price: int 63 | 64 | def nam(self, ctx): 65 | return '\U0001f6e1 {}'.format(i18n(ctx, self.name)) 66 | 67 | @classmethod 68 | async def convert(cls, ctx, argument): 69 | if argument not in armors: 70 | raise c.BadArgument('{!r} is not a valid armor'.format(argument)) 71 | return armors[argument] 72 | 73 | class DefenseFuncs(object): 74 | @staticmethod 75 | def firesuit(user, opponent, damage): 76 | """fight/armor-firesuit-defense""" 77 | if opponent.weapon.name[13:] == 'fire': 78 | user.health += damage 79 | return 0 80 | return damage 81 | 82 | with open(os.path.join(os.path.dirname(__file__), 'armors.json')) as f: 83 | armors = json.load(f) 84 | for name, value in armors.items(): 85 | if isinstance(value['defense'], str): 86 | value['defense'] = getattr(DefenseFuncs, value['defense']) 87 | armors[name] = Armor(**value) 88 | 89 | @_dataclass 90 | class Item(object): 91 | name: str 92 | action: type(lambda:None) 93 | price: int 94 | 95 | def nam(self, ctx): 96 | return i18n(ctx, self.name) 97 | 98 | @classmethod 99 | async def convert(cls, ctx, argument): 100 | if argument not in items: 101 | raise c.BadArgument('{!r} is not a valid item'.format(argument)) 102 | return items[argument] 103 | 104 | class ActionFuncs(object): 105 | @staticmethod 106 | def bandages(user, enemy): 107 | """fight/item-bandages-action""" 108 | user.health += 5 109 | 110 | @staticmethod 111 | def luck(user, opponent): 112 | """fight/item-luck-action""" 113 | if (random.randint(1, 6) + random.randint(1, 6)) <= 6: 114 | opponent.health -= 1 115 | else: 116 | opponent.health += 1 117 | 118 | with open(os.path.join(os.path.dirname(__file__), 'items.json')) as f: 119 | items = json.load(f) 120 | for name, value in items.items(): 121 | value['action'] = getattr(ActionFuncs, value['action']) 122 | items[name] = Item(**value) 123 | 124 | @_dataclass 125 | class Enemy(object): 126 | name: str 127 | health: int 128 | reward: int 129 | weapon: Weapon = RandomWeapon() 130 | armor: Armor = armors['clothes'] 131 | 132 | def nam(self, ctx): 133 | return i18n(ctx, self.name) 134 | 135 | @_dataclass 136 | class Player(object): 137 | name: str 138 | health: int 139 | gold: int = 0 140 | weapons: list = [weapons['fist']] 141 | armors: list = [armors['clothes']] 142 | items: list = [] 143 | 144 | @property 145 | def weapon(self): 146 | return self.weapons[-1] 147 | 148 | @property 149 | def armor(self): 150 | return self.armors[-1] 151 | 152 | def nam(self, ctx): 153 | return self.name 154 | 155 | with open(os.path.join(os.path.dirname(__file__), "monsters.json")) as f: 156 | monsters = json.load(f) 157 | for name, value in monsters.items(): 158 | if 'weapon' in value: 159 | value['weapon'] = weapons[value['weapon']] 160 | if 'armor' in value: 161 | value['armor'] = armors[value['armor']] 162 | monsters[name] = Enemy(**value) 163 | -------------------------------------------------------------------------------- /kenny2automate/fight/items.json: -------------------------------------------------------------------------------- 1 | { 2 | "bandages": { 3 | "name": "fight/item-bandages", 4 | "action": "bandages", 5 | "price": 3 6 | }, 7 | "luck": { 8 | "name": "fight/item-luck", 9 | "action": "luck", 10 | "price": 5 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /kenny2automate/fight/monsters.json: -------------------------------------------------------------------------------- 1 | { 2 | "giant": { 3 | "name": "fight/monster-giant", 4 | "health": 10, 5 | "reward": 10, 6 | "weapon": "fist" 7 | }, 8 | "undead": { 9 | "name": "fight/monster-undead", 10 | "health": 5, 11 | "reward": 3 12 | }, 13 | "ghost": { 14 | "name": "fight/monster-ghost", 15 | "health": 1, 16 | "reward": 1, 17 | "weapon": "fist" 18 | }, 19 | "vampire": { 20 | "name": "fight/monster-vampire", 21 | "health": 4, 22 | "reward": 5, 23 | "weapon": "fangs" 24 | }, 25 | "mummy": { 26 | "name": "fight/monster-mummy", 27 | "health": 3, 28 | "reward": 2, 29 | "weapon": "fist", 30 | "armor": "bandages" 31 | }, 32 | "witch": { 33 | "name": "fight/monster-witch", 34 | "health": 7, 35 | "reward": 10, 36 | "weapon": "wand", 37 | "armor": "cloak" 38 | }, 39 | "dragon": { 40 | "name": "fight/monster-dragon", 41 | "health": 30, 42 | "reward": 30, 43 | "weapon": "fire", 44 | "armor": "firesuit" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /kenny2automate/fight/weapons.json: -------------------------------------------------------------------------------- 1 | { 2 | "fist": { 3 | "name": "fight/weapon-fist", 4 | "damage": 1, 5 | "emoji": "\u270a" 6 | }, 7 | "dagger": { 8 | "name": "fight/weapon-dagger", 9 | "damage": 2, 10 | "price": 3 11 | }, 12 | "pistol": { 13 | "name": "fight/weapon-pistol", 14 | "damage": 5, 15 | "price": 10, 16 | "emoji": "\ud83d\udd2b" 17 | }, 18 | "fangs": { 19 | "name": "fight/weapon-fangs", 20 | "damage": "fangs" 21 | }, 22 | "wand": { 23 | "name": "fight/weapon-wand", 24 | "damage": 7, 25 | "price": 13 26 | }, 27 | "bomb": { 28 | "name": "fight/weapon-bomb", 29 | "damage": "bomb", 30 | "price": 15, 31 | "emoji": "\ud83d\udca3" 32 | }, 33 | "fire": { 34 | "name": "fight/weapon-fire", 35 | "damage": 10, 36 | "emoji": "\ud83d\udd25" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /kenny2automate/help.py: -------------------------------------------------------------------------------- 1 | from discord import Forbidden 2 | from discord.ext import commands 3 | from .emoji import SEE_DM 4 | from .i18n import i18n, embed 5 | 6 | class Kenny2help(commands.HelpCommand): 7 | def get_destination(self): 8 | return self.context.author 9 | 10 | async def send_the_help(self, emb): 11 | try: 12 | await self.get_destination().send(embed=emb) 13 | except Forbidden as exc: 14 | if exc.code == 50007: 15 | await self.context.send(embed=embed(self.context, 16 | title=('error',), 17 | description=('cant-dm', self.context.author.mention), 18 | color=0xff0000 19 | )) 20 | else: 21 | raise 22 | else: 23 | await self.context.message.add_reaction(SEE_DM) 24 | 25 | async def send_bot_help(self, mapping): 26 | ctx = self.context 27 | filtered = await self.filter_commands(ctx.bot.commands) 28 | categories = [] 29 | for cmd in filtered: 30 | if cmd.cog not in categories: 31 | categories.append(cmd.cog) 32 | em = embed(ctx, 33 | description=(ctx.bot.description,), 34 | color=0x55acee, 35 | fields=tuple( 36 | ( 37 | i.qualified_name, 38 | (i.description, ctx.prefix) 39 | if i.description else '\1', 40 | False 41 | ) 42 | for i in categories 43 | if i is not None 44 | ) + ( 45 | ('\1', ('help-cmds',), False), 46 | ) + tuple( 47 | ( 48 | self.command_string(i), 49 | (i.description, ctx.prefix) 50 | if i.description else '\1', 51 | False 52 | ) 53 | for i in filtered 54 | if i.cog is None 55 | ), 56 | footer=('help-footer', ctx.prefix) 57 | ) 58 | await self.send_the_help(em) 59 | 60 | async def send_cog_help(self, cog): 61 | ctx = self.context 62 | filtered = await self.filter_commands(cog.get_commands()) 63 | em = embed(ctx, 64 | description=(cog.description, ctx.prefix) if cog.description else None, 65 | color=0x55acee, 66 | fields=( 67 | (self.command_string(i), (i.description, ctx.prefix), False) 68 | for i in filtered 69 | ) 70 | ) 71 | await self.send_the_help(em) 72 | 73 | def command_string(self, cmd): 74 | ctx = self.context 75 | title = ctx.prefix + cmd.qualified_name 76 | title += ' ' + (i18n(ctx, cmd.usage) or cmd.signature) 77 | title = title.strip() 78 | return '`{}`'.format(title) 79 | 80 | async def send_group_help(self, group): 81 | ctx = self.context 82 | filtered = await self.filter_commands(group.commands) 83 | title = self.command_string(group) 84 | desc = i18n(ctx, group.description, ctx.prefix) 85 | if group.help: 86 | desc += '\n\n' 87 | desc += i18n(ctx, group.help, ctx.prefix) 88 | em = embed(ctx, 89 | title=title, 90 | description=desc, 91 | color=0x55acee, 92 | fields=( 93 | (self.command_string(i), (i.description, ctx.prefix), False) 94 | for i in filtered 95 | ) 96 | ) 97 | await self.send_the_help(em) 98 | 99 | async def send_command_help(self, command): 100 | ctx = self.context 101 | title = self.command_string(command) 102 | desc = i18n(ctx, command.description, ctx.prefix) 103 | if command.help: 104 | desc += '\n\n' 105 | desc += i18n(ctx, command.help, ctx.prefix) 106 | em = embed(ctx, 107 | title=title, 108 | description=desc, 109 | color=0x55acee 110 | ) 111 | await self.send_the_help(em) 112 | -------------------------------------------------------------------------------- /kenny2automate/numguess.py: -------------------------------------------------------------------------------- 1 | import re 2 | import random 3 | import asyncio as a 4 | import discord as d 5 | from discord.ext.commands import command, Cog 6 | from .i18n import i18n, embed 7 | 8 | class Numguess(Cog): 9 | """numguess/cog-desc""" 10 | @command(description='numguess/numguess-desc') 11 | async def numguess(self, ctx): 12 | guess = None 13 | limDn = 0 14 | limUp = 100 15 | tries = 7 16 | secret = random.randint(1, 100) 17 | await ctx.send(embed=embed(ctx, 18 | description=('numguess/numguess-intro', limDn, limUp, tries), 19 | color=0 20 | )) 21 | while guess != secret and tries > 0: 22 | await ctx.send(embed=embed(ctx, 23 | title=('numguess/numguess-guess-title',), 24 | description=('numguess/numguess-guess',), 25 | color=0xffff00 26 | )) 27 | result = '' 28 | try: 29 | guess = await ctx.bot.wait_for('message', 30 | check=lambda m: ( 31 | m.channel == ctx.channel 32 | and re.match('^[0-9]+$', m.content) 33 | ), 34 | timeout=60.0) 35 | except a.TimeoutError: 36 | await ctx.send(embed=embed(ctx, 37 | title=('hangman/timeout',), 38 | description=('numguess/numguess-timeout', 60), 39 | color=0xff0000 40 | )) 41 | return 42 | guess = int(guess.content) 43 | if guess == secret: 44 | break 45 | elif guess < limDn or guess > limUp: 46 | result += i18n(ctx, 'numguess/numguess-oor') 47 | elif guess < secret: 48 | result += i18n(ctx, 'numguess/numguess-low') 49 | limDn = guess 50 | elif guess > secret: 51 | result += i18n(ctx, 'numguess/numguess-high') 52 | limUp = guess 53 | tries -= 1 54 | result += i18n(ctx, 'numguess/numguess-range', limDn, limUp, tries) 55 | await ctx.send(embed=d.Embed(description=result, color=0xfffffe)) 56 | await ctx.send(embed=embed(ctx, 57 | title=('numguess/numguess-end',), 58 | description=( 59 | ('numguess/numguess-correct', tries) 60 | if guess == secret 61 | else ('numguess/numguess-oot', secret) 62 | ), 63 | color=0x55acee if guess == secret else 0xff0000 64 | )) 65 | -------------------------------------------------------------------------------- /kenny2automate/place.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pygame 3 | from discord.ext import commands 4 | from discord.ext.commands import group, Cog 5 | from .emoji import CHECK, CROSS 6 | from .i18n import embed 7 | from .utils import lone_group 8 | from .tmpfiles import sendsurf 9 | 10 | WIDTH, HEIGHT = SIZE = 1000, 1000 11 | SMOLW, SMOLH = SMOLS = WIDTH // 20, HEIGHT // 20 12 | 13 | try: 14 | PLACE = pygame.image.load(os.path.join('resources', 'place.png')) 15 | except pygame.error: 16 | PLACE = pygame.Surface(SIZE) 17 | PLACE.fill((255, 255, 255)) 18 | 19 | class Place(Cog): 20 | """place/cmd-desc""" 21 | 22 | def __del__(self): 23 | pygame.image.save(PLACE, os.path.join('resources', 'place.png')) 24 | 25 | @group(invoke_without_command=True, description='place/cmd-desc') 26 | @lone_group(False) 27 | async def place(self, ctx): 28 | """place/cmd-help""" 29 | pass 30 | 31 | @staticmethod 32 | def around(x, y): 33 | surf = pygame.Surface(SMOLS, pygame.SRCALPHA) 34 | surf.fill((0, 0, 0, 0)) 35 | surf.blit(PLACE, (SMOLW // 2 - x, SMOLH // 2 - y)) 36 | return surf 37 | 38 | @place.command(description='place/get-desc') 39 | async def get(self, ctx, x: int = None, y: int = None): 40 | if y is None: 41 | return await sendsurf(ctx.send, PLACE, 'place', 'place.png') 42 | if not (0 <= x < WIDTH and 0 <= y < HEIGHT): 43 | return await ctx.send(embed=embed(ctx, 44 | title=('error',), 45 | description=('place/coord-error', x, y), 46 | color=0xff0000 47 | )) 48 | surf = self.around(x, y) 49 | surf = pygame.transform.scale(surf, SIZE) 50 | await sendsurf(ctx.send, surf, 'place', 'portion.png') 51 | 52 | @commands.cooldown(1, 300.0, commands.BucketType.user) 53 | @place.command(description='place/set-desc') 54 | async def set(self, ctx, x: int, y: int, r: int, g: int, b: int): 55 | if not (0 <= x < WIDTH and 0 <= y < HEIGHT): 56 | return await ctx.send(embed=embed(ctx, 57 | title=('error',), 58 | description=('place/coord-error', x, y), 59 | color=0xff0000 60 | )) 61 | if not (0 <= r <= 255 and 0 <= g <= 255 and 0 <= b <= 255): 62 | return await ctx.send(embed=embed(ctx, 63 | title=('error',), 64 | description=('place/color-error', r, g, b), 65 | color=0xff0000 66 | )) 67 | surf = self.around(x, y) 68 | surf.set_at((SMOLW // 2, SMOLH // 2), (r, g, b)) 69 | surf = pygame.transform.scale(surf, SIZE) 70 | msg = await sendsurf(ctx.send, surf, 'place', 'confirm.png', embed=embed(ctx, 71 | title=('place/confirm-title',), 72 | description=('place/confirm',), 73 | color=0xffff00 74 | )) 75 | await msg.add_reaction(CHECK) 76 | await msg.add_reaction(CROSS) 77 | reaction, user = await ctx.bot.wait_for('reaction_add', check=lambda r, u: ( 78 | r.message.id == msg.id 79 | and u.id == ctx.author.id 80 | and str(r) in (CHECK, CROSS) 81 | )) 82 | if str(reaction) == CHECK: 83 | PLACE.set_at((x, y), (r, g, b)) 84 | await ctx.send(embed=embed(ctx, 85 | title=('success',), 86 | description=('place/set', x, y, r, g, b), 87 | color=0x55acee 88 | )) 89 | else: 90 | await ctx.send(embed=embed(ctx, 91 | title=('place/cancelled-title',), 92 | description=('place/cancelled',), 93 | color=0xff0000 94 | )) 95 | -------------------------------------------------------------------------------- /kenny2automate/regexes.py: -------------------------------------------------------------------------------- 1 | import re 2 | from discord.ext.commands import group, Cog 3 | from .i18n import i18n 4 | 5 | class Regexes(Cog): 6 | """regexes/cog-desc""" 7 | @group(description='regexes/regex-desc') 8 | async def regex(self, ctx): 9 | pass 10 | 11 | @regex.command(description='regexes/search-desc') 12 | async def search(self, ctx, pattern, string, flags=None): 13 | if flags is not None: 14 | exp = '(?' + flags.lower().replace('l', 'L') + ')(?:' + pattern + ')' 15 | else: 16 | exp = pattern 17 | try: 18 | m = re.search(exp, string) 19 | except Exception: 20 | m = False 21 | if m: 22 | result = i18n( 23 | ctx, 24 | 'regexes/search-result', 25 | m.group(0), 26 | '\n'.join(group or '' for group in m.groups()) 27 | ) 28 | elif m is False: 29 | result = i18n(ctx, 'regexes/search-error') 30 | else: 31 | result = i18n(ctx, 'regexes/search-result-nomatch') 32 | await ctx.send(result) 33 | 34 | @regex.command(description='regexes/findall-desc') 35 | async def findall(self, ctx, pattern, string, flags=None): 36 | if flags is not None: 37 | exp = '(?' + flags.lower().replace('l', 'L') + ')(?:' + pattern + ')' 38 | else: 39 | exp = pattern 40 | gen = re.finditer(exp, string) 41 | result = i18n(ctx, 'regexes/findall-result', '{0}') 42 | result2 = '' 43 | try: 44 | for m in gen: 45 | result2 += m.group(0) + ('\t' if len(m.groups()) > 0 else '') + '\t'.join(m.groups()) + '\n' 46 | except Exception: 47 | result = result.format(i18n(ctx, 'regexes/findall-error')) 48 | if not result2: 49 | result = result.format(i18n(ctx, 'regexes/findall-result-none')) 50 | if result2: 51 | ms = result2.split('\n') 52 | ms = [len(m.strip().split('\t')) for m in ms] 53 | ms = max(ms) 54 | gpstr = i18n(ctx, 'regexes/findall-gp', '{0}') #manual format 55 | result2 = '\t'.join([gpstr.format(i) for i in range(ms)]) \ 56 | + '\n' + result2 57 | result = result.format(result2) 58 | await ctx.send(result) 59 | -------------------------------------------------------------------------------- /kenny2automate/server/404.html: -------------------------------------------------------------------------------- 1 |
2 |

404 Not Found

3 |

No idea what you're looking for. ._.

4 | 9 |
10 | -------------------------------------------------------------------------------- /kenny2automate/server/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/kenny2automate/server/favicon.ico -------------------------------------------------------------------------------- /kenny2automate/server/index.html: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /kenny2automate/server/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color: #34383c;/*#202225;*/ 3 | font-family: "open sans", Helvetica, Arial, sans-serif; 4 | color: #dcddde; 5 | line-height: 1.5; 6 | text-rendering: optimizeLegibility; 7 | margin: 0; 8 | } 9 | .button { 10 | background: #62d3f5; 11 | outline: none; 12 | padding: 10px 30px; 13 | color: #000; 14 | font-size: 14px; 15 | border-radius: 3px; 16 | border-width: initial; 17 | border-style: none; 18 | border-color: initial; 19 | transition: border 180ms ease-out 0s, background 180ms ease-out 0s; 20 | user-select: none; 21 | min-height: 32px; 22 | margin-bottom: 20px; 23 | } 24 | .button:hover { 25 | background: #32c5f2; 26 | cursor: pointer; 27 | } 28 | .button.big { 29 | height: 60px; 30 | } 31 | .middle { 32 | width: 100%; 33 | height: 100vh; 34 | display: flex; 35 | justify-content: center; 36 | align-items: center; 37 | flex-direction: column; 38 | } 39 | .middle h1 { 40 | font-size: 3em; 41 | } 42 | .center { 43 | width: 100%; 44 | display: flex; 45 | align-items: center; 46 | flex-direction: column; 47 | } 48 | .center h1 { 49 | font-size: 3em; 50 | } 51 | /* box around slider */ 52 | .switch { 53 | position: relative; 54 | display: inline-block; 55 | width: 60px; 56 | height: 34px; 57 | } 58 | /* hide default */ 59 | .switch input { 60 | opacity: 0; 61 | width: 0; 62 | height: 0; 63 | } 64 | /* the slider */ 65 | .slider { 66 | position: absolute; 67 | cursor: pointer; 68 | top: 0; 69 | left: 0; 70 | right: 0; 71 | bottom: 0; 72 | background-color: #ccc; 73 | transition: .4s; 74 | border-radius: 34px; 75 | } 76 | .slider:before { 77 | position: absolute; 78 | content: ""; 79 | height: 26px; 80 | width: 26px; 81 | left: 4px; 82 | bottom: 4px; 83 | background-color: white; 84 | transition: .4s; 85 | border-radius: 50%; 86 | } 87 | input:checked + .slider { 88 | background-color: #2196f3; 89 | } 90 | .switch.red input:checked + .slider { 91 | background-color: #f04747; 92 | } 93 | input:focus + .slider { 94 | box-shadow: 0 0 1px #2196f3; 95 | } 96 | input:checked + .slider:before { 97 | transform: translateX(26px); 98 | } 99 | input[type=text], .channel div, textarea { 100 | font-size: 14px; 101 | color: #fff; 102 | border: 1px solid #1a1a1a; 103 | background: #2b2f33; 104 | border-radius: 3px; 105 | padding: 8px; 106 | font-weight: 500; 107 | outline: none; 108 | transition: border 250ms ease-out; 109 | } 110 | textarea { 111 | resize: vertical; 112 | } 113 | input[type=text], textarea { 114 | width: 100%; 115 | } 116 | input[type=text]:hover, select:hover, .channel div:hover, textarea:hover { 117 | border-color: #000; 118 | } 119 | input[type=text]:focus, select:focus, .channel div:focus, textarea:focus { 120 | border-color: #000; 121 | } 122 | .channel div, .flex-left-right, .flex-up-down { 123 | display: flex; 124 | justify-content: space-between; 125 | align-items: center; 126 | } 127 | .flex-left-right { 128 | flex-direction: row; 129 | } 130 | .flex-up-down { 131 | flex-direction: column; 132 | } 133 | select { 134 | color: #fff; 135 | border: 1px solid #1a1a1a; 136 | background: #2b2f33; 137 | border-radius: 3px; 138 | padding: 8px; 139 | font-weight: 500; 140 | outline: none; 141 | transition: border 250ms ease-out; 142 | } 143 | table { 144 | width: 100%; 145 | } 146 | td, th { 147 | padding: 10px; 148 | text-align: center; 149 | } 150 | .right { 151 | text-align: right; 152 | } 153 | .left { 154 | text-align: left; 155 | } 156 | td.channel { 157 | border: none; 158 | } 159 | .guild > img { 160 | border-radius: 50%; 161 | box-shadow: 0 0 32px #fff; 162 | } 163 | .spacer { 164 | display: inline-block; 165 | width: 30px; 166 | } 167 | .command { 168 | font-family: monospace; 169 | } 170 | code { 171 | background-color: #2f3136; 172 | } 173 | -------------------------------------------------------------------------------- /kenny2automate/server/notloggedin.html: -------------------------------------------------------------------------------- 1 |
2 |

{h1}

3 |

{p}

4 | 9 |
10 | -------------------------------------------------------------------------------- /kenny2automate/server/server.html: -------------------------------------------------------------------------------- 1 |
2 |

{h1}

3 |
4 |
5 | 6 | 7 |
8 |
9 | 10 | {channels} 11 |
12 |
13 | 14 | 15 | 16 | 22 | 30 | 31 | 32 | 33 | 38 | 46 | 47 | 48 | 51 |
{cmd}{disabled}
{cog}{disabled}
{words_censor}
49 | 50 |
52 |
53 |
54 | 55 | 56 |
57 |
58 | 86 | -------------------------------------------------------------------------------- /kenny2automate/server/servers.html: -------------------------------------------------------------------------------- 1 |
2 |

{h1}

3 |
4 | {div} 5 | 6 | 7 | 8 | 9 |
10 |
{}
11 |
12 | -------------------------------------------------------------------------------- /kenny2automate/server/settings.html: -------------------------------------------------------------------------------- 1 |
2 |

{h1}

3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 15 |
16 | 17 | {2} 18 | {3} 19 |
20 | 21 | 22 | 23 | 26 | 27 |
24 | 25 |
28 |
29 |
30 | -------------------------------------------------------------------------------- /kenny2automate/server/template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {0} 5 | 6 | 7 | {1} 8 | 9 | 10 | -------------------------------------------------------------------------------- /kenny2automate/sql/v0.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS channels ( 2 | -- channel ID 3 | channel_id integer PRIMARY KEY NOT NULL, 4 | -- occupied in crudehangman? 5 | ch_occupied boolean DEFAULT 0, 6 | -- language 7 | lang char(2) 8 | ); 9 | 10 | CREATE TABLE IF NOT EXISTS users ( 11 | -- user ID 12 | user_id integer PRIMARY KEY NOT NULL, 13 | -- language 14 | lang char(2), 15 | -- command prefix 16 | prefix char(1), 17 | -- fight health 18 | fight_health integer unsigned, 19 | -- fight weapon 20 | fight_weapons text, 21 | -- fight armor 22 | fight_armors text, 23 | -- fight gold 24 | fight_gold integer unsigned, 25 | -- fight items, stringified list 26 | fight_items text 27 | ); 28 | -------------------------------------------------------------------------------- /kenny2automate/sql/v1.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE users ADD COLUMN evol_self pickle; 2 | 3 | CREATE TABLE evol_unnamed_children ( 4 | -- entry ID, autoincrement to avoid reusing deleted row IDs 5 | entry_id integer PRIMARY KEY AUTOINCREMENT, 6 | -- child 7 | child pickle 8 | ); 9 | -------------------------------------------------------------------------------- /kenny2automate/sql/v2.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS server_sessions ( 2 | -- session key 3 | session_id text PRIMARY KEY NOT NULL, 4 | -- session data 5 | session pickle 6 | ); 7 | ALTER TABLE channels ADD COLUMN games_ping text; 8 | ALTER TABLE users ADD COLUMN games_ping text; 9 | -------------------------------------------------------------------------------- /kenny2automate/sql/v3.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS guilds ( 2 | -- guild ID 3 | guild_id integer PRIMARY KEY NOT NULL, 4 | -- bad words 5 | words_censor text, 6 | -- disabled commands 7 | guild_disabled_commands text, 8 | -- disabled cogs 9 | guild_disabled_cogs text 10 | ) 11 | -------------------------------------------------------------------------------- /kenny2automate/sql/v4.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE users ADD COLUMN games_games text; 2 | -------------------------------------------------------------------------------- /kenny2automate/sql/v5.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS sentence_words ( 2 | -- the word 3 | word text, 4 | -- the user who added it 5 | user_id integer 6 | ); 7 | -------------------------------------------------------------------------------- /kenny2automate/sql/v6.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS pow211_highscores ( 2 | -- user ID 3 | user_id integer PRIMARY KEY, 4 | -- score 5 | score integer 6 | ); 7 | -------------------------------------------------------------------------------- /kenny2automate/tmpfiles.py: -------------------------------------------------------------------------------- 1 | from os import path, remove, mkdir 2 | import time 3 | from contextlib import contextmanager 4 | import pygame.image 5 | import discord 6 | 7 | tmpdir = 'temp' 8 | if not path.isdir(tmpdir): 9 | if path.exists(tmpdir): 10 | remove(tmpdir) 11 | else: 12 | mkdir(tmpdir) 13 | 14 | INDEX = 0 15 | 16 | def tmpfile(prefix='', suffix=''): 17 | global INDEX 18 | INDEX += 1 19 | return path.join( 20 | tmpdir, 21 | '{}{}-{}{}'.format( 22 | prefix, 23 | time.time(), 24 | INDEX, 25 | suffix 26 | ) 27 | ) 28 | 29 | @contextmanager 30 | def tmpf(*args, **kwargs): 31 | name = tmpfile(*args, **kwargs) 32 | try: 33 | yield name 34 | finally: 35 | remove(name) 36 | 37 | async def sendsurf(meth, surf, tmpfileprefix, 38 | filename='image.png', **kwargs): 39 | with tmpf(tmpfileprefix + '-', '.png') as name: 40 | pygame.image.save(surf, name) 41 | file = discord.File(name, filename) 42 | return await meth(file=file, **kwargs) 43 | -------------------------------------------------------------------------------- /kenny2automate/utils.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | from functools import wraps, partial 3 | from discord.ext import commands 4 | 5 | class DummyCtx(object): 6 | def __init__(self, **kwargs): 7 | self.__dict__.update(kwargs) 8 | 9 | def dataclass(cls): 10 | def __init__(self, *args, **kwargs): 11 | taken_care_of = set() 12 | len_annos = len(cls.__annotations__) 13 | len_args = len(args) 14 | if len_annos < len_args: 15 | raise TypeError('__init__() takes ' 16 | '{} positional arguments but {} were given'.format( 17 | len_annos, len_args 18 | )) 19 | for name, arg in zip(cls.__annotations__.keys(), args): 20 | if not isinstance(arg, cls.__annotations__[name]): 21 | raise TypeError('argument {!r} is not of type {!r}'.format( 22 | name, cls.__annotations__[name].__name__ 23 | )) 24 | setattr(self, name, arg) 25 | taken_care_of.add(name) 26 | for name, value in kwargs.items(): 27 | if name in taken_care_of: 28 | raise TypeError('__init__() got multiple values for argument ' 29 | '{!r}'.format(name)) 30 | if not isinstance(value, cls.__annotations__.get(name, object)): 31 | raise TypeError('argument {!r} is not of type {!r}'.format( 32 | name, cls.__annotations__[name].__name__ 33 | )) 34 | taken_care_of.add(name) 35 | setattr(self, name, value) 36 | for name in cls.__annotations__: 37 | if name not in taken_care_of and not hasattr(cls, name): 38 | raise TypeError('__init__() missing 1 required argument: ' 39 | '{!r}'.format(name)) 40 | #weird memory stuff 41 | elif hasattr(cls, name) \ 42 | and cls.__annotations__[name] in {list, set, dict}: 43 | setattr(self, name, cls.__annotations__[name]()) 44 | def copy(self): 45 | return cls(**self.__dict__) 46 | def __eq__(self, other): 47 | if not isinstance(other, cls): 48 | return False 49 | for name, value in self.__dict__.items(): 50 | if isinstance(value, type(lambda:None)): 51 | continue 52 | if isinstance(getattr(other, name), type(lambda:None)): 53 | continue 54 | if getattr(other, name) != value: 55 | return False 56 | return True 57 | cls.__init__ = __init__ 58 | cls.copy = copy 59 | cls.__eq__ = __eq__ 60 | return cls 61 | 62 | def lone_group(in_cls=True): 63 | def wrapper(func): 64 | @wraps(func) 65 | async def newfunc(*args): 66 | for arg in args: 67 | if isinstance(arg, commands.Context): 68 | ctx = arg 69 | break 70 | else: 71 | return 72 | ctx.bot.help_command.context = ctx 73 | await ctx.bot.help_command.send_group_help(ctx.command) 74 | return newfunc 75 | return wrapper 76 | 77 | async def q(call, *args, **kwargs): 78 | return await asyncio.get_event_loop().run_in_executor( 79 | None, partial(call, *args, **kwargs) 80 | ) 81 | background = asyncio.create_task 82 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | discord.py<2.0.0 2 | requests 3 | aiohttp 4 | aiofiles 5 | aiosqlite 6 | pygame 7 | python-datamuse 8 | python-chess 9 | googletrans 10 | -------------------------------------------------------------------------------- /resources/card_games/set/cross-circle-blue-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-circle-blue-1.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-circle-blue-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-circle-blue-2.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-circle-blue-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-circle-blue-3.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-circle-green-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-circle-green-1.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-circle-green-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-circle-green-2.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-circle-green-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-circle-green-3.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-circle-red-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-circle-red-1.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-circle-red-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-circle-red-2.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-circle-red-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-circle-red-3.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-octagon-blue-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-octagon-blue-1.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-octagon-blue-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-octagon-blue-2.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-octagon-blue-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-octagon-blue-3.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-octagon-green-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-octagon-green-1.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-octagon-green-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-octagon-green-2.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-octagon-green-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-octagon-green-3.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-octagon-red-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-octagon-red-1.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-octagon-red-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-octagon-red-2.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-octagon-red-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-octagon-red-3.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-square-blue-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-square-blue-1.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-square-blue-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-square-blue-2.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-square-blue-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-square-blue-3.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-square-green-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-square-green-1.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-square-green-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-square-green-2.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-square-green-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-square-green-3.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-square-red-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-square-red-1.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-square-red-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-square-red-2.png -------------------------------------------------------------------------------- /resources/card_games/set/cross-square-red-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/cross-square-red-3.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-circle-blue-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-circle-blue-1.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-circle-blue-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-circle-blue-2.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-circle-blue-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-circle-blue-3.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-circle-green-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-circle-green-1.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-circle-green-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-circle-green-2.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-circle-green-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-circle-green-3.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-circle-red-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-circle-red-1.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-circle-red-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-circle-red-2.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-circle-red-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-circle-red-3.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-octagon-blue-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-octagon-blue-1.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-octagon-blue-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-octagon-blue-2.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-octagon-blue-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-octagon-blue-3.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-octagon-green-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-octagon-green-1.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-octagon-green-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-octagon-green-2.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-octagon-green-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-octagon-green-3.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-octagon-red-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-octagon-red-1.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-octagon-red-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-octagon-red-2.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-octagon-red-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-octagon-red-3.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-square-blue-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-square-blue-1.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-square-blue-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-square-blue-2.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-square-blue-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-square-blue-3.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-square-green-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-square-green-1.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-square-green-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-square-green-2.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-square-green-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-square-green-3.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-square-red-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-square-red-1.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-square-red-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-square-red-2.png -------------------------------------------------------------------------------- /resources/card_games/set/empty-square-red-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/empty-square-red-3.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-circle-blue-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-circle-blue-1.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-circle-blue-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-circle-blue-2.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-circle-blue-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-circle-blue-3.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-circle-green-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-circle-green-1.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-circle-green-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-circle-green-2.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-circle-green-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-circle-green-3.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-circle-red-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-circle-red-1.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-circle-red-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-circle-red-2.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-circle-red-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-circle-red-3.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-octagon-blue-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-octagon-blue-1.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-octagon-blue-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-octagon-blue-2.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-octagon-blue-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-octagon-blue-3.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-octagon-green-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-octagon-green-1.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-octagon-green-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-octagon-green-2.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-octagon-green-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-octagon-green-3.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-octagon-red-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-octagon-red-1.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-octagon-red-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-octagon-red-2.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-octagon-red-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-octagon-red-3.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-square-blue-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-square-blue-1.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-square-blue-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-square-blue-2.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-square-blue-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-square-blue-3.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-square-green-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-square-green-1.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-square-green-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-square-green-2.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-square-green-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-square-green-3.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-square-red-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-square-red-1.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-square-red-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-square-red-2.png -------------------------------------------------------------------------------- /resources/card_games/set/filled-square-red-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/set/filled-square-red-3.png -------------------------------------------------------------------------------- /resources/card_games/uno/blue-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/blue-0.png -------------------------------------------------------------------------------- /resources/card_games/uno/blue-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/blue-1.png -------------------------------------------------------------------------------- /resources/card_games/uno/blue-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/blue-2.png -------------------------------------------------------------------------------- /resources/card_games/uno/blue-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/blue-3.png -------------------------------------------------------------------------------- /resources/card_games/uno/blue-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/blue-4.png -------------------------------------------------------------------------------- /resources/card_games/uno/blue-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/blue-5.png -------------------------------------------------------------------------------- /resources/card_games/uno/blue-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/blue-6.png -------------------------------------------------------------------------------- /resources/card_games/uno/blue-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/blue-7.png -------------------------------------------------------------------------------- /resources/card_games/uno/blue-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/blue-8.png -------------------------------------------------------------------------------- /resources/card_games/uno/blue-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/blue-9.png -------------------------------------------------------------------------------- /resources/card_games/uno/blue-draw2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/blue-draw2.png -------------------------------------------------------------------------------- /resources/card_games/uno/blue-reverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/blue-reverse.png -------------------------------------------------------------------------------- /resources/card_games/uno/blue-skip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/blue-skip.png -------------------------------------------------------------------------------- /resources/card_games/uno/draw4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/draw4.png -------------------------------------------------------------------------------- /resources/card_games/uno/green-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/green-0.png -------------------------------------------------------------------------------- /resources/card_games/uno/green-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/green-1.png -------------------------------------------------------------------------------- /resources/card_games/uno/green-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/green-2.png -------------------------------------------------------------------------------- /resources/card_games/uno/green-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/green-3.png -------------------------------------------------------------------------------- /resources/card_games/uno/green-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/green-4.png -------------------------------------------------------------------------------- /resources/card_games/uno/green-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/green-5.png -------------------------------------------------------------------------------- /resources/card_games/uno/green-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/green-6.png -------------------------------------------------------------------------------- /resources/card_games/uno/green-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/green-7.png -------------------------------------------------------------------------------- /resources/card_games/uno/green-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/green-8.png -------------------------------------------------------------------------------- /resources/card_games/uno/green-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/green-9.png -------------------------------------------------------------------------------- /resources/card_games/uno/green-draw2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/green-draw2.png -------------------------------------------------------------------------------- /resources/card_games/uno/green-reverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/green-reverse.png -------------------------------------------------------------------------------- /resources/card_games/uno/green-skip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/green-skip.png -------------------------------------------------------------------------------- /resources/card_games/uno/red-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/red-0.png -------------------------------------------------------------------------------- /resources/card_games/uno/red-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/red-1.png -------------------------------------------------------------------------------- /resources/card_games/uno/red-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/red-2.png -------------------------------------------------------------------------------- /resources/card_games/uno/red-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/red-3.png -------------------------------------------------------------------------------- /resources/card_games/uno/red-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/red-4.png -------------------------------------------------------------------------------- /resources/card_games/uno/red-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/red-5.png -------------------------------------------------------------------------------- /resources/card_games/uno/red-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/red-6.png -------------------------------------------------------------------------------- /resources/card_games/uno/red-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/red-7.png -------------------------------------------------------------------------------- /resources/card_games/uno/red-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/red-8.png -------------------------------------------------------------------------------- /resources/card_games/uno/red-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/red-9.png -------------------------------------------------------------------------------- /resources/card_games/uno/red-draw2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/red-draw2.png -------------------------------------------------------------------------------- /resources/card_games/uno/red-reverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/red-reverse.png -------------------------------------------------------------------------------- /resources/card_games/uno/red-skip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/red-skip.png -------------------------------------------------------------------------------- /resources/card_games/uno/wild.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/wild.png -------------------------------------------------------------------------------- /resources/card_games/uno/yellow-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/yellow-0.png -------------------------------------------------------------------------------- /resources/card_games/uno/yellow-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/yellow-1.png -------------------------------------------------------------------------------- /resources/card_games/uno/yellow-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/yellow-2.png -------------------------------------------------------------------------------- /resources/card_games/uno/yellow-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/yellow-3.png -------------------------------------------------------------------------------- /resources/card_games/uno/yellow-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/yellow-4.png -------------------------------------------------------------------------------- /resources/card_games/uno/yellow-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/yellow-5.png -------------------------------------------------------------------------------- /resources/card_games/uno/yellow-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/yellow-6.png -------------------------------------------------------------------------------- /resources/card_games/uno/yellow-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/yellow-7.png -------------------------------------------------------------------------------- /resources/card_games/uno/yellow-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/yellow-8.png -------------------------------------------------------------------------------- /resources/card_games/uno/yellow-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/yellow-9.png -------------------------------------------------------------------------------- /resources/card_games/uno/yellow-draw2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/yellow-draw2.png -------------------------------------------------------------------------------- /resources/card_games/uno/yellow-reverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/yellow-reverse.png -------------------------------------------------------------------------------- /resources/card_games/uno/yellow-skip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/card_games/uno/yellow-skip.png -------------------------------------------------------------------------------- /resources/chess/black-bishop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/black-bishop.png -------------------------------------------------------------------------------- /resources/chess/black-board.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/black-board.png -------------------------------------------------------------------------------- /resources/chess/black-king.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/black-king.png -------------------------------------------------------------------------------- /resources/chess/black-knight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/black-knight.png -------------------------------------------------------------------------------- /resources/chess/black-pawn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/black-pawn.png -------------------------------------------------------------------------------- /resources/chess/black-queen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/black-queen.png -------------------------------------------------------------------------------- /resources/chess/black-rook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/black-rook.png -------------------------------------------------------------------------------- /resources/chess/emojis.json: -------------------------------------------------------------------------------- 1 | {"black": { 2 | "queen": 649206000330735617, 3 | "rook": 649206000397582349, 4 | "pawn": 649206000422748170, 5 | "bishop": 649206000481599488, 6 | "king": 649206000607428618, 7 | "knight": 649206000762748930 8 | }, "white": { 9 | "king": 649206000523411457, 10 | "rook": 649206000599171091, 11 | "knight": 649206000607297536, 12 | "queen": 649206000955686912, 13 | "bishop": 649206001102487552, 14 | "pawn": 649206001257414656 15 | }} 16 | -------------------------------------------------------------------------------- /resources/chess/white-bishop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/white-bishop.png -------------------------------------------------------------------------------- /resources/chess/white-board.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/white-board.png -------------------------------------------------------------------------------- /resources/chess/white-king.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/white-king.png -------------------------------------------------------------------------------- /resources/chess/white-knight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/white-knight.png -------------------------------------------------------------------------------- /resources/chess/white-pawn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/white-pawn.png -------------------------------------------------------------------------------- /resources/chess/white-queen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/white-queen.png -------------------------------------------------------------------------------- /resources/chess/white-rook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/chess/white-rook.png -------------------------------------------------------------------------------- /resources/emoji/0_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/0_number.png -------------------------------------------------------------------------------- /resources/emoji/10_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/10_number.png -------------------------------------------------------------------------------- /resources/emoji/1_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/1_number.png -------------------------------------------------------------------------------- /resources/emoji/2_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/2_number.png -------------------------------------------------------------------------------- /resources/emoji/3_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/3_number.png -------------------------------------------------------------------------------- /resources/emoji/4_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/4_number.png -------------------------------------------------------------------------------- /resources/emoji/5_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/5_number.png -------------------------------------------------------------------------------- /resources/emoji/6_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/6_number.png -------------------------------------------------------------------------------- /resources/emoji/7_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/7_number.png -------------------------------------------------------------------------------- /resources/emoji/8_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/8_number.png -------------------------------------------------------------------------------- /resources/emoji/9_number.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/9_number.png -------------------------------------------------------------------------------- /resources/emoji/__letter.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/__letter.pdn -------------------------------------------------------------------------------- /resources/emoji/__letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/__letter.png -------------------------------------------------------------------------------- /resources/emoji/a_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/a_letter.png -------------------------------------------------------------------------------- /resources/emoji/b_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/b_letter.png -------------------------------------------------------------------------------- /resources/emoji/c_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/c_letter.png -------------------------------------------------------------------------------- /resources/emoji/clubs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/clubs.png -------------------------------------------------------------------------------- /resources/emoji/d_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/d_letter.png -------------------------------------------------------------------------------- /resources/emoji/diamonds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/diamonds.png -------------------------------------------------------------------------------- /resources/emoji/e_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/e_letter.png -------------------------------------------------------------------------------- /resources/emoji/f_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/f_letter.png -------------------------------------------------------------------------------- /resources/emoji/g_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/g_letter.png -------------------------------------------------------------------------------- /resources/emoji/h_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/h_letter.png -------------------------------------------------------------------------------- /resources/emoji/hearts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/hearts.png -------------------------------------------------------------------------------- /resources/emoji/i_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/i_letter.png -------------------------------------------------------------------------------- /resources/emoji/j_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/j_letter.png -------------------------------------------------------------------------------- /resources/emoji/k_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/k_letter.png -------------------------------------------------------------------------------- /resources/emoji/l_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/l_letter.png -------------------------------------------------------------------------------- /resources/emoji/m_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/m_letter.png -------------------------------------------------------------------------------- /resources/emoji/n_letter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/n_letter.png -------------------------------------------------------------------------------- /resources/emoji/no.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/no.png -------------------------------------------------------------------------------- /resources/emoji/spades.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/spades.png -------------------------------------------------------------------------------- /resources/emoji/yes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kenny2github/kenny2automate/f2f9931d68de2d5be74ba6731b7db6c62a62b25f/resources/emoji/yes.png -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | import subprocess 2 | from setuptools import setup, find_packages 3 | 4 | with open('requirements.txt') as f: 5 | reqs = f.read() 6 | reqs = reqs.strip().splitlines() 7 | 8 | VERSION = subprocess.check_output( 9 | "cd kenny2automate && git rev-parse --short HEAD", 10 | shell=True 11 | ).decode('ascii').strip() 12 | 13 | setup( 14 | name='kenny2automate', 15 | version='19.0a' + VERSION, 16 | description='A Python Discord bot', 17 | url='https://github.com/Kenny2github/kenny2automate', 18 | author='Kenny2github', 19 | author_email='kenny2minecraft@gmail.com', 20 | classifiers=[ 21 | 'Development Status :: 4 - Beta', 22 | 'Intended Audience :: Developers', 23 | 'Topic :: Communications :: Chat', 24 | 'Topic :: Games/Entertainment :: Turn Based Strategy', 25 | 'License :: OSI Approved :: MIT License', 26 | 'Natural Language :: English', 27 | 'Natural Language :: Chinese (Traditional)', 28 | 'Natural Language :: Japanese', 29 | 'Natural Language :: Russian', 30 | 'Natural Language :: French', 31 | 'Operating System :: Microsoft :: Windows :: Windows 10', 32 | 'Operating System :: POSIX :: Linux', 33 | 'Programming Language :: Python :: 3 :: Only', 34 | 'Programming Language :: Python :: 3.7', 35 | 'Programming Language :: SQL', 36 | ], 37 | keywords='discord bot fun', 38 | packages=find_packages(), 39 | install_requires=reqs, 40 | python_requires='>=3.7', 41 | ) 42 | --------------------------------------------------------------------------------