mirror of
https://gitlab.com/Kwoth/nadekobot.git
synced 2025-09-10 17:28:27 -04:00
Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
52c9ec670d | ||
|
1ac472c676 | ||
|
39f01a3164 | ||
|
486916944b | ||
|
68e96cd1bb | ||
|
5a647d100a | ||
|
a562a571e2 | ||
|
12146ad2da | ||
|
453ac3efd2 | ||
|
c9e89e1911 | ||
|
611817f78a | ||
|
2e66137f3e | ||
|
2d92424dd4 | ||
|
ffba03adbe | ||
|
76ebb87fb5 | ||
|
4a50c30c56 | ||
|
e70a91ae60 |
@@ -9,6 +9,7 @@
|
||||
!src/NadekoBot.Generators/**
|
||||
# Use Ayu stuff
|
||||
!src/ayu/**
|
||||
!docker-entrypoint.sh
|
||||
|
||||
# ignore bin and obj folders in projects
|
||||
src/**/bin/*
|
||||
|
@@ -95,4 +95,31 @@ upload-windows-updater-release:
|
||||
- sed -i "s/_VERSION_/$CI_COMMIT_TAG/g" releases-v3.json
|
||||
- aws --version
|
||||
- aws --endpoint-url $AWS_SERVICE_URL s3api put-object --bucket "$AWS_BUCKET_NAME" --key "dl/bot/$INSTALLER_FILE_NAME" --acl public-read --body "$INSTALLER_OUTPUT_DIR/$INSTALLER_FILE_NAME"
|
||||
- aws --endpoint-url $AWS_SERVICE_URL s3api put-object --bucket "$AWS_BUCKET_NAME" --key "dl/bot/releases-v3.json" --acl public-read --body "releases-v3.json"
|
||||
- aws --endpoint-url $AWS_SERVICE_URL s3api put-object --bucket "$AWS_BUCKET_NAME" --key "dl/bot/releases-v3.json" --acl public-read --body "releases-v3.json"
|
||||
|
||||
docker-build:
|
||||
# Use the official docker image.
|
||||
image: docker:latest
|
||||
stage: build
|
||||
services:
|
||||
- docker:dind
|
||||
before_script:
|
||||
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
|
||||
# Default branch leaves tag empty (= latest tag)
|
||||
# All other branches are tagged with the escaped branch name (commit ref slug)
|
||||
script:
|
||||
- |
|
||||
if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
|
||||
tag=""
|
||||
echo "Running on default branch '$CI_DEFAULT_BRANCH': tag = 'latest'"
|
||||
else
|
||||
tag=":$CI_COMMIT_REF_SLUG"
|
||||
echo "Running on branch '$CI_COMMIT_BRANCH': tag = $tag"
|
||||
fi
|
||||
- docker build --pull -t "$CI_REGISTRY_IMAGE${tag}" .
|
||||
- docker push "$CI_REGISTRY_IMAGE${tag}"
|
||||
# Run this job in a branch where a Dockerfile exists
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH
|
||||
exists:
|
||||
- Dockerfile
|
||||
|
27
CHANGELOG.md
27
CHANGELOG.md
@@ -2,9 +2,35 @@
|
||||
|
||||
Experimental changelog. Mostly based on [keepachangelog](https://keepachangelog.com/en/1.0.0/) except date format. a-c-f-r-o
|
||||
|
||||
## Unreleased
|
||||
|
||||
## [3.0.6] - 27.09.2021
|
||||
|
||||
### Added
|
||||
|
||||
- .logignore now supports ignoring users and channels. Use without parameters to see the ignore list
|
||||
|
||||
### Changed
|
||||
|
||||
- Hangman rewrite
|
||||
- Hangman categories are now held in separate .yml files in data/hangman/XYZ.yml where XYZ is the category name
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed an exception which caused repeater queue to break
|
||||
- Fixed url field not working in embeds
|
||||
|
||||
## [3.0.5] - 20.09.2021
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed images not automatically reloading on startup if the keys don't exist
|
||||
- Fixed `.logserver` - it should no longer throw an exception if you had no logsettings previously
|
||||
|
||||
## [3.0.4] - 16.09.2021
|
||||
|
||||
### Added
|
||||
|
||||
- Fully translated to Brazilian Portuguese 🎉
|
||||
- Added `%server.boosters%` and `%server.boost_level%` placeholders
|
||||
- Added `DmHelpTextKeywords` to `data/bot.yml`
|
||||
@@ -12,6 +38,7 @@ Experimental changelog. Mostly based on [keepachangelog](https://keepachangelog.
|
||||
- If no keywords are specified, bot will reply to every DM (like before)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Possible fix for `.repeat` bug
|
||||
- Slight adjustment for repeater logic
|
||||
- Timer should no longer increase on some repeaters
|
||||
|
35
Dockerfile
35
Dockerfile
@@ -1,4 +1,4 @@
|
||||
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
|
||||
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
|
||||
WORKDIR /source
|
||||
|
||||
COPY src/NadekoBot/*.csproj src/NadekoBot/
|
||||
@@ -9,14 +9,33 @@ RUN dotnet restore src/NadekoBot/
|
||||
|
||||
COPY . .
|
||||
WORKDIR /source/src/NadekoBot
|
||||
RUN dotnet --version
|
||||
RUN dotnet publish -c Release -o /app --no-restore
|
||||
RUN set -xe; \
|
||||
dotnet --version; \
|
||||
dotnet publish -c Release -o /app --no-restore; \
|
||||
mv /app/data /app/data_init; \
|
||||
rm -Rf libopus* libsodium* opus.* runtimes/win* runtimes/osx* runtimes/linux-arm* runtimes/linux-mips*; \
|
||||
find /app -type f -exec chmod -x {} \; ;\
|
||||
chmod +x /app/NadekoBot
|
||||
|
||||
# final stage/image
|
||||
FROM mcr.microsoft.com/dotnet/runtime:5.0
|
||||
FROM mcr.microsoft.com/dotnet/runtime:5.0-buster-slim
|
||||
WORKDIR /app
|
||||
|
||||
RUN set -xe; \
|
||||
useradd -m nadeko; \
|
||||
apt-get update; \
|
||||
apt-get install -y libopus0 libsodium23 libsqlite3-0 curl ffmpeg python3 sudo; \
|
||||
update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1; \
|
||||
echo 'Defaults>nadeko env_keep+="ASPNETCORE_* DOTNET_* NadekoBot_* shard_id total_shards TZ"' > /etc/sudoers.d/nadeko; \
|
||||
curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl; \
|
||||
chmod +x /usr/local/bin/youtube-dl
|
||||
|
||||
COPY --from=build /app ./
|
||||
COPY docker-entrypoint.sh /usr/local/sbin
|
||||
|
||||
ENV shard_id=0
|
||||
ENV total_shards=1
|
||||
WORKDIR /app
|
||||
COPY --from=build /app ./
|
||||
VOLUME [ "app/data", "app/creds.yml", "app/creds_example.yml" ]
|
||||
ENTRYPOINT dotnet NadekoBot.dll "$shard_id" "$total_shards"
|
||||
|
||||
VOLUME [ "app/data" ]
|
||||
ENTRYPOINT [ "/usr/local/sbin/docker-entrypoint.sh" ]
|
||||
CMD dotnet NadekoBot.dll "$shard_id" "$total_shards"
|
20
docker-entrypoint.sh
Executable file
20
docker-entrypoint.sh
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/bin/sh
|
||||
set -e;
|
||||
|
||||
data_init=/app/data_init
|
||||
data=/app/data
|
||||
|
||||
# populate /app/data if empty
|
||||
for i in $(ls $data_init)
|
||||
do
|
||||
if [ ! -e "$data/$i" ]; then
|
||||
[ -f "$data_init/$i" ] && cp "$data_init/$i" "$data/$i"
|
||||
[ -d "$data_init/$i" ] && cp -r "$data_init/$i" "$data/$i"
|
||||
fi
|
||||
done
|
||||
|
||||
# fix folder permissions
|
||||
chown -R nadeko:nadeko "$data"
|
||||
|
||||
# drop to regular user and launch command
|
||||
exec sudo -u nadeko "$@"
|
@@ -1,3 +1,35 @@
|
||||
# Setting up NadekoBot with Docker
|
||||
|
||||
Soon:tm:
|
||||
# DO NOT USE YET - WORK IN PROGRESS
|
||||
|
||||
Upgrade from 2.x to v3 does not work because the file is mount readonly
|
||||
|
||||
### Docker Compose
|
||||
```yml
|
||||
version: "3.7"
|
||||
services:
|
||||
nadeko:
|
||||
image: registry.gitlab.com/veovis/nadekobot:v3-docker
|
||||
depends_on:
|
||||
- redis
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
#NadekoBot_RedisOptions: redis,name=nadeko
|
||||
#NadekoBot_ShardRunCommand: dotnet
|
||||
#NadekoBot_ShardRunArguments: /app/NadekoBot.dll {0} {1}
|
||||
volumes:
|
||||
- /srv/nadeko/conf/creds.yml:/app/creds.yml:ro
|
||||
- /srv/nadeko/data:/app/data
|
||||
|
||||
redis:
|
||||
image: redis:4-alpine
|
||||
sysctls:
|
||||
- net.core.somaxconn=511
|
||||
command: redis-server --maxmemory 32M --maxmemory-policy volatile-lru
|
||||
volumes:
|
||||
- /srv/nadeko/redis-data:/data
|
||||
```
|
||||
### Updating
|
||||
- `cd /srv/nadeko`
|
||||
- `docker-compose pull`
|
||||
- `docker-compose up -d`
|
||||
|
@@ -16,12 +16,12 @@ Open Terminal (if you're on an installation with a window manager) and navigate
|
||||
4. Exit the installer in order to set up your `creds.yml`
|
||||
5. Copy the creds.yml template `cp nadekobot/output/creds_example.yml nadekobot/output/creds.yml`
|
||||
6. Open `nadekobot/output/creds.yml` with your favorite text editor. We will use nano here
|
||||
- `nano nadekobot/output/creds.yml`
|
||||
- `nano nadekobot/output/creds.yml`
|
||||
7. [Enter your bot's token](../../creds-guide)
|
||||
- After you're done, you can close nano (and save the file) by inputting, in order
|
||||
- `CTRL` + `X`
|
||||
- `Y`
|
||||
- `Enter`
|
||||
- After you're done, you can close nano (and save the file) by inputting, in order
|
||||
- `CTRL` + `X`
|
||||
- `Y`
|
||||
- `Enter`
|
||||
8. Run the bot (type `3` and press enter)
|
||||
|
||||
##### Update Instructions
|
||||
@@ -37,51 +37,51 @@ Open Terminal (if you're on an installation with a window manager) and navigate
|
||||
##### Installation Instructions
|
||||
|
||||
1. Download the latest release from <https://gitlab.com/Kwoth/nadekobot/-/releases>
|
||||
- Look for the file called "X.XX.X-linux-x64-build.tar" (where X.XX.X is a series of numbers) and download it
|
||||
- Look for the file called "X.XX.X-linux-x64-build.tar" (where X.XX.X is a series of numbers) and download it
|
||||
2. Untar it
|
||||
- ⚠ Make sure that you change X.XX.X to the same series of numbers as in step 1!
|
||||
- `tar xf X.XX.X-linux-x64-build.tar`
|
||||
- ⚠ Make sure that you change X.XX.X to the same series of numbers as in step 1!
|
||||
- `tar xf X.XX.X-linux-x64-build.tar`
|
||||
3. Rename the `nadekobot-linux-x64` to `nadekobot`
|
||||
- `mv nadekobot-linux-x64 nadekobot`
|
||||
- `mv nadekobot-linux-x64 nadekobot`
|
||||
4. Move into nadekobot directory and make NadekoBot executable
|
||||
- `cd nadekobot && chmod +x NadekoBot`
|
||||
- `cd nadekobot && chmod +x NadekoBot`
|
||||
5. Copy the creds.yml template
|
||||
- `cp creds_example.yml creds.yml`
|
||||
- `cp creds_example.yml creds.yml`
|
||||
6. Open `creds.yml` with your favorite text editor. We will use nano here
|
||||
- `nano nadekobot/output/creds.yml`
|
||||
- `nano nadekobot/output/creds.yml`
|
||||
8. [Enter your bot's token](#creds-guide)
|
||||
- After you're done, you can close nano (and save the file) by inputting, in order
|
||||
- `CTRL` + `X`
|
||||
- `Y`
|
||||
- `Enter`
|
||||
- After you're done, you can close nano (and save the file) by inputting, in order
|
||||
- `CTRL` + `X`
|
||||
- `Y`
|
||||
- `Enter`
|
||||
9. Run the bot
|
||||
- `./NadekoBot`
|
||||
- `./NadekoBot`
|
||||
|
||||
##### Update Instructions
|
||||
|
||||
1. Stop the bot
|
||||
2. Download the latest release from <https://gitlab.com/Kwoth/nadekobot/-/releases>
|
||||
- Look for the file called "X.XX.X-linux-x64-build.tar" (where X.XX.X is a series of numbers) and download it
|
||||
- Look for the file called "x.x.x-linux-x64-build.tar" (where `X.X.X` is a version, for example 3.0.4) and download it
|
||||
3. Untar it
|
||||
- ⚠ Make sure that you change X.XX.X to the same series of numbers as in step 2!
|
||||
- `tar xf 2.99.8-linux-x64-build.tar`
|
||||
- ⚠ Make sure that you change `X.X.X` to the same series of numbers as in step 2!
|
||||
- `tar xf x.x.x-linux-x64-build.tar`
|
||||
4. Rename the old nadekobot directory to nadekobot-old (remove your old backup first if you have one, or back it up under a different name)
|
||||
- `rm -rf nadekobot-old 2>/dev/null`
|
||||
- `mv nadekobot nadekobot-old`
|
||||
- `rm -rf nadekobot-old 2>/dev/null`
|
||||
- `mv nadekobot nadekobot-old`
|
||||
5. Rename the new nadekobot directory to nadekobot
|
||||
- `mv nadekobot-linux-x64 nadekobot`
|
||||
- `mv nadekobot-linux-x64 nadekobot`
|
||||
6. Remove old strings and aliases to avoid overwriting the updated versions of those files
|
||||
- ⚠ If you've modified said files, back them up instead
|
||||
- `rm nadekobot-old/data/aliases.yml`
|
||||
- `rm -r nadekobot-old/data/strings`
|
||||
- ⚠ If you've modified said files, back them up instead
|
||||
- `rm nadekobot-old/data/aliases.yml`
|
||||
- `rm -r nadekobot-old/data/strings`
|
||||
7. Copy old data
|
||||
- `cp -RT nadekobot-old/data/ nadekobot/data/`
|
||||
- `cp -RT nadekobot-old/data/ nadekobot/data`
|
||||
8. Copy creds.yml
|
||||
- `cp nadekobot-old/creds.yml nadekobot/`
|
||||
- `cp nadekobot-old/creds.yml nadekobot/`
|
||||
9. Move into nadekobot directory and make the NadekoBot executable
|
||||
- `cd nadekobot && chmod +x NadekoBot`
|
||||
- `cd nadekobot && chmod +x NadekoBot`
|
||||
10. Run the bot
|
||||
- `./NadekoBot`
|
||||
- `./NadekoBot`
|
||||
|
||||
🎉 Enjoy
|
||||
|
||||
@@ -95,7 +95,135 @@ mv nadekobot nadekobot-old && \
|
||||
mv nadekobot-linux-x64 nadekobot && \
|
||||
rm nadekobot-old/data/aliases.yml && \
|
||||
rm -r nadekobot-old/data/strings && \
|
||||
cp -RT nadekobot-old/data/ nadekobot/data/ && \
|
||||
cp -RT nadekobot-old/data/ nadekobot/data && \
|
||||
cp nadekobot-old/creds.yml nadekobot/ && \
|
||||
cd nadekobot && chmod +x NadekoBot
|
||||
```
|
||||
|
||||
## Running Nadeko
|
||||
|
||||
While there are two run modes built into the installer, these options only run Nadeko within the current session. Below are 3 methods of running Nadeko as a background process.
|
||||
|
||||
### Tmux (Preferred Method)
|
||||
|
||||
Using `tmux` is the simplest method, and is therefore recommended for most users.
|
||||
|
||||
1. Start a tmux session:
|
||||
- `tmux`
|
||||
2. Navigate to the project's root directory
|
||||
- Project root directory location example: `/home/user/nadekobot/`
|
||||
3. Enter the `output` directory:
|
||||
- `cd output`
|
||||
4. Run the bot using:
|
||||
- `dotnet NadekoBot.dll`
|
||||
5. Detatch the tmux session:
|
||||
- Press `Ctrl` + `B`
|
||||
- Then press `D`
|
||||
|
||||
Nadeko should now be running in the background of your system. To re-open the tmux session to either update, restart, or whatever, execute `tmux a`.
|
||||
|
||||
### Systemd
|
||||
|
||||
Compared to using tmux, this method requires a little bit more work to set up, but has the benefit of allowing Nadeko to automatically start back up after a system reboot or the execution of the `.die` command.
|
||||
|
||||
1. Navigate to the project's root directory
|
||||
- Project root directory location example: `/home/user/nadekobot/`
|
||||
2. Use the following command to create a service that will be used to start Nadeko:
|
||||
|
||||
```bash
|
||||
echo "[Unit]
|
||||
Description=NadekoBot service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=$USER
|
||||
WorkingDirectory=$PWD/output
|
||||
# If you want Nadeko to be compiled prior to every startup, uncomment the lines
|
||||
# below. Note that it's not neccessary unless you are personally modifying the
|
||||
# source code.
|
||||
#ExecStartPre=/usr/bin/dotnet build ../src/NadekoBot/NadekoBot.csproj -c Release -o output/
|
||||
ExecStart=/usr/bin/dotnet NadekoBot.dll
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=NadekoBot
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target" | sudo tee /etc/systemd/system/nadeko.service
|
||||
```
|
||||
|
||||
3. Make the new service available:
|
||||
- `sudo systemctl daemon-reload`
|
||||
4. Start Nadeko:
|
||||
- `sudo systemctl start nadeko.service && sudo systemctl enable nadeko.service`
|
||||
|
||||
|
||||
### Systemd + Script
|
||||
|
||||
This method is similar to the one above, but requires one extra step, with the added benefit of better error logging and control over what happens before and after the startup of Nadeko.
|
||||
|
||||
1. Locate the project and move to its parent directory
|
||||
- Project location example: `/home/user/nadekobot/`
|
||||
- Parent directory example: `/home/user/`
|
||||
2. Use the following command to create a service that will be used to execute `NadekoRun.sh`:
|
||||
|
||||
```bash
|
||||
echo "[Unit]
|
||||
Description=NadekoBot service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=$USER
|
||||
WorkingDirectory=$PWD
|
||||
ExecStart=/bin/bash NadekoRun.sh
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
SyslogIdentifier=NadekoBot
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target" | sudo tee /etc/systemd/system/nadeko.service
|
||||
```
|
||||
|
||||
3. Make the new service available:
|
||||
- `sudo systemctl daemon-reload`
|
||||
4. Use the following command to create a script that will be used to start Nadeko:
|
||||
|
||||
```bash
|
||||
echo "#\!/bin/bash
|
||||
|
||||
echo \"\"
|
||||
echo \"Running NadekoBot in the background with auto restart\"
|
||||
youtube-dl -U
|
||||
|
||||
# If you want Nadeko to be compiled prior to every startup, uncomment the lines
|
||||
# below. Note that it's not neccessary unless you are personally modifying the
|
||||
# source code.
|
||||
#echo \"Compiling NadekoBot...\"
|
||||
#cd \"$PWD\"/nadekobot
|
||||
#dotnet build src/NadekoBot/NadekoBot.csproj -c Release -o output/
|
||||
|
||||
echo \"Starting NadekoBot...\"
|
||||
|
||||
while true; do
|
||||
{
|
||||
cd \"$PWD\"/nadekobot/output
|
||||
dotnet NadekoBot.dll
|
||||
## If a non-zero exit code is produced, exit this script.
|
||||
} || {
|
||||
error_code=\"\$?\"
|
||||
echo \"An error occurred when trying to start NadekBot\"
|
||||
echo \"EXIT CODE: \$?\"
|
||||
exit \"\$error_code\"
|
||||
}
|
||||
|
||||
youtube-dl -U
|
||||
echo \"Restarting NadekoBot...\"
|
||||
done
|
||||
|
||||
echo \"Stopping NadekoBot...\"" > NadekoRun.sh
|
||||
```
|
||||
|
||||
5. Start Nadeko:
|
||||
- `sudo systemctl start nadeko.service && sudo systemctl enable nadeko.service`
|
@@ -80,6 +80,7 @@ You can still install them manually:
|
||||
Open PowerShell (press windows button on your keyboard and type powershell, it should show up; alternatively, right click the start menu and select Windows PowerShell), and navigate to the location where you want to install the bot (for example `cd ~/Desktop/`)
|
||||
|
||||
1. `git clone https://gitlab.com/kwoth/nadekobot -b v3 --depth 1`
|
||||
2. `cd nadekobot`
|
||||
3. `dotnet publish -c Release -o output/ src/NadekoBot/`
|
||||
4. `cd output && cp creds_example.yml creds.yml`
|
||||
5. Open `creds.yml` with your favorite text editor (Please don't use Notepad or WordPad. You can use Notepad++, VSCode, Atom, Sublime, or something similar)
|
||||
@@ -91,16 +92,30 @@ Open PowerShell (press windows button on your keyboard and type powershell, it s
|
||||
|
||||
Open PowerShell as described above and run the following commands:
|
||||
|
||||
1. Navigate to your bot's folder, for example `cd ~/Desktop/nadekobot/src/NadekoBot`
|
||||
2. Pull the latest updates (this will fail if you have custom code changes).
|
||||
- If you don't have custom code changes, just run `git pull`
|
||||
- If you do have custom code changes, You have 3 options
|
||||
- Undo all changes with `git checkout -- * && git pull`
|
||||
- Stash changes and try to re-apply them `git stash && git pull && git stash apply`
|
||||
- Commit your changes and resolve merge conflicts `git add . && git commit -m "My commit message" && git pull`
|
||||
3. Re-run the bot `dotnet run -c Release`
|
||||
1. Stop the bot
|
||||
- ⚠️ Make sure you don't have your database, credentials or any other nadekobot folder open in some application, this might prevent some of the steps from executing succesfully
|
||||
2. Navigate to your bot's folder, example:
|
||||
- `cd ~/Desktop/nadekobot`
|
||||
3. Pull the new version
|
||||
- `git pull`
|
||||
- ⚠️ If this fails, you may want to stash or remove your code changes if you don't know how to resolve merge conflicts
|
||||
4. **Backup** old output in case your data is overwritten
|
||||
- `cp -r -fo output/ output-old`
|
||||
5. Build the bot again
|
||||
- `dotnet publish -c Release -o output/ src/NadekoBot/`
|
||||
6. Remove old strings and aliases to avoid overwriting the updated versions of those files
|
||||
- ⚠ If you've modified said files, back them up instead
|
||||
- `rm output-old/data/aliases.yml`
|
||||
- `rm -r output-old/data/strings`
|
||||
7. Copy old data
|
||||
- `cp -Recurse .\output-old\data\ .\output\ -Force`
|
||||
8. Copy creds.yml
|
||||
- `cp output-old/creds.yml output/`
|
||||
9. Run the bot
|
||||
- `cd output`
|
||||
- `dotnet NadekoBot.dll`
|
||||
|
||||
⚠ You're expected to understand that your database will be in `bin/Release/<framework>/data/`, and if `<framework>` gets changed in the future, you will have to move your database manually.
|
||||
🎉 Enjoy
|
||||
|
||||
#### Music prerequisites
|
||||
In order to use music commands, you need ffmpeg and youtube-dl installed.
|
||||
|
@@ -102,7 +102,6 @@ namespace NadekoBot
|
||||
.AddSingleton(Client) // discord socket client
|
||||
.AddSingleton(_commandService)
|
||||
.AddSingleton(this)
|
||||
.AddSingleton<IDataCache, RedisCache>()
|
||||
.AddSingleton<ISeria, JsonSeria>()
|
||||
.AddSingleton<IPubSub, RedisPubSub>()
|
||||
.AddSingleton<IConfigSeria, YamlSeria>()
|
||||
@@ -132,10 +131,18 @@ namespace NadekoBot
|
||||
}
|
||||
else
|
||||
{
|
||||
svcs.AddSingleton<ICoordinator, RemoteGrpcCoordinator>()
|
||||
.AddSingleton<IReadyExecutor>(x => (IReadyExecutor)x.GetRequiredService<ICoordinator>());
|
||||
svcs.AddSingleton<RemoteGrpcCoordinator>()
|
||||
.AddSingleton<ICoordinator>(x => x.GetRequiredService<RemoteGrpcCoordinator>())
|
||||
.AddSingleton<IReadyExecutor>(x => x.GetRequiredService<RemoteGrpcCoordinator>());
|
||||
}
|
||||
|
||||
svcs.AddSingleton<RedisLocalDataCache>()
|
||||
.AddSingleton<ILocalDataCache>(x => x.GetRequiredService<RedisLocalDataCache>())
|
||||
.AddSingleton<RedisImagesCache>()
|
||||
.AddSingleton<IImageCache>(x => x.GetRequiredService<RedisImagesCache>())
|
||||
.AddSingleton<IReadyExecutor>(x => x.GetRequiredService<RedisImagesCache>())
|
||||
.AddSingleton<IDataCache, RedisCache>();
|
||||
|
||||
svcs.Scan(scan => scan
|
||||
.FromAssemblyOf<IReadyExecutor>()
|
||||
.AddClasses(classes => classes.AssignableToAny(
|
||||
|
@@ -53,6 +53,7 @@ namespace NadekoBot.Common.Replacements
|
||||
newEmbedData.Title = Replace(embedData.Title);
|
||||
newEmbedData.Thumbnail = Replace(embedData.Thumbnail);
|
||||
newEmbedData.Image = Replace(embedData.Image);
|
||||
newEmbedData.Url = Replace(embedData.Url);
|
||||
if (embedData.Author != null)
|
||||
{
|
||||
newEmbedData.Author = new SmartTextEmbedAuthor();
|
||||
|
@@ -48,6 +48,7 @@ namespace NadekoBot.Db
|
||||
|
||||
private static IQueryable<GuildConfig> IncludeEverything(this DbSet<GuildConfig> configs)
|
||||
{
|
||||
// todo split query
|
||||
return configs
|
||||
.AsQueryable()
|
||||
.Include(gc => gc.CommandCooldowns)
|
||||
@@ -117,9 +118,18 @@ namespace NadekoBot.Db
|
||||
{
|
||||
var logSetting = ctx.LogSettings
|
||||
.AsQueryable()
|
||||
.Include(x => x.IgnoredChannels)
|
||||
.Include(x => x.LogIgnores)
|
||||
.Where(x => x.GuildId == guildId)
|
||||
.FirstOrDefault();
|
||||
|
||||
if (logSetting is null)
|
||||
{
|
||||
ctx.LogSettings.Add(logSetting = new ()
|
||||
{
|
||||
GuildId = guildId
|
||||
});
|
||||
ctx.SaveChanges();
|
||||
}
|
||||
|
||||
return logSetting;
|
||||
}
|
||||
|
@@ -1,8 +0,0 @@
|
||||
namespace NadekoBot.Services.Database.Models
|
||||
{
|
||||
public class IgnoredLogChannel : DbEntity
|
||||
{
|
||||
public LogSetting LogSetting { get; set; }
|
||||
public ulong ChannelId { get; set; }
|
||||
}
|
||||
}
|
16
src/NadekoBot/Db/Models/IgnoredLogItem.cs
Normal file
16
src/NadekoBot/Db/Models/IgnoredLogItem.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
namespace NadekoBot.Services.Database.Models
|
||||
{
|
||||
public class IgnoredLogItem : DbEntity
|
||||
{
|
||||
public int LogSettingId { get; set; }
|
||||
public LogSetting LogSetting { get; set; }
|
||||
public ulong LogItemId { get; set; }
|
||||
public IgnoredItemType ItemType { get; set; }
|
||||
}
|
||||
|
||||
public enum IgnoredItemType
|
||||
{
|
||||
Channel,
|
||||
User,
|
||||
}
|
||||
}
|
@@ -4,8 +4,7 @@ namespace NadekoBot.Services.Database.Models
|
||||
{
|
||||
public class LogSetting : DbEntity
|
||||
{
|
||||
public HashSet<IgnoredLogChannel> IgnoredChannels { get; set; } = new HashSet<IgnoredLogChannel>();
|
||||
public HashSet<IgnoredVoicePresenceChannel> IgnoredVoicePresenceChannelIds { get; set; } = new HashSet<IgnoredVoicePresenceChannel>();
|
||||
public List<IgnoredLogItem> LogIgnores { get; set; } = new List<IgnoredLogItem>();
|
||||
|
||||
public ulong GuildId { get; set; }
|
||||
public ulong? LogOtherId { get; set; }
|
||||
|
@@ -42,8 +42,8 @@ namespace NadekoBot.Services.Database
|
||||
|
||||
//logging
|
||||
public DbSet<LogSetting> LogSettings { get; set; }
|
||||
public DbSet<IgnoredLogChannel> IgnoredLogChannels { get; set; }
|
||||
public DbSet<IgnoredVoicePresenceChannel> IgnoredVoicePresenceCHannels { get; set; }
|
||||
public DbSet<IgnoredLogItem> IgnoredLogChannels { get; set; }
|
||||
|
||||
public DbSet<RotatingPlayingStatus> RotatingStatus { get; set; }
|
||||
public DbSet<BlacklistEntry> Blacklist { get; set; }
|
||||
@@ -342,6 +342,15 @@ namespace NadekoBot.Services.Database
|
||||
modelBuilder.Entity<LogSetting>(ls => ls
|
||||
.HasIndex(x => x.GuildId)
|
||||
.IsUnique());
|
||||
|
||||
modelBuilder.Entity<LogSetting>(ls => ls
|
||||
.HasMany(x => x.LogIgnores)
|
||||
.WithOne(x => x.LogSetting)
|
||||
.OnDelete(DeleteBehavior.Cascade));
|
||||
|
||||
modelBuilder.Entity<IgnoredLogItem>(ili => ili
|
||||
.HasIndex(x => new { x.LogSettingId, x.LogItemId, x.ItemType })
|
||||
.IsUnique());
|
||||
|
||||
#endregion
|
||||
|
||||
|
2657
src/NadekoBot/Migrations/20210921204645_logignore-user-channel.Designer.cs
generated
Normal file
2657
src/NadekoBot/Migrations/20210921204645_logignore-user-channel.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,97 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
namespace NadekoBot.Migrations
|
||||
{
|
||||
public partial class logignoreuserchannel : Migration
|
||||
{
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.Sql("DELETE FROM IgnoredLogChannels WHERE LogSettingId is NULL");
|
||||
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_IgnoredLogChannels_LogSettings_LogSettingId",
|
||||
table: "IgnoredLogChannels");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_IgnoredLogChannels_LogSettingId",
|
||||
table: "IgnoredLogChannels");
|
||||
|
||||
migrationBuilder.RenameColumn(
|
||||
name: "ChannelId",
|
||||
table: "IgnoredLogChannels",
|
||||
newName: "LogItemId");
|
||||
|
||||
migrationBuilder.AlterColumn<int>(
|
||||
name: "LogSettingId",
|
||||
table: "IgnoredLogChannels",
|
||||
type: "INTEGER",
|
||||
nullable: false,
|
||||
defaultValue: 0,
|
||||
oldClrType: typeof(int),
|
||||
oldType: "INTEGER",
|
||||
oldNullable: true);
|
||||
|
||||
migrationBuilder.AddColumn<int>(
|
||||
name: "ItemType",
|
||||
table: "IgnoredLogChannels",
|
||||
type: "INTEGER",
|
||||
nullable: false,
|
||||
defaultValue: 0);
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_IgnoredLogChannels_LogSettingId_LogItemId_ItemType",
|
||||
table: "IgnoredLogChannels",
|
||||
columns: new[] { "LogSettingId", "LogItemId", "ItemType" },
|
||||
unique: true);
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_IgnoredLogChannels_LogSettings_LogSettingId",
|
||||
table: "IgnoredLogChannels",
|
||||
column: "LogSettingId",
|
||||
principalTable: "LogSettings",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
}
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_IgnoredLogChannels_LogSettings_LogSettingId",
|
||||
table: "IgnoredLogChannels");
|
||||
|
||||
migrationBuilder.DropIndex(
|
||||
name: "IX_IgnoredLogChannels_LogSettingId_LogItemId_ItemType",
|
||||
table: "IgnoredLogChannels");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "ItemType",
|
||||
table: "IgnoredLogChannels");
|
||||
|
||||
migrationBuilder.RenameColumn(
|
||||
name: "LogItemId",
|
||||
table: "IgnoredLogChannels",
|
||||
newName: "ChannelId");
|
||||
|
||||
migrationBuilder.AlterColumn<int>(
|
||||
name: "LogSettingId",
|
||||
table: "IgnoredLogChannels",
|
||||
type: "INTEGER",
|
||||
nullable: true,
|
||||
oldClrType: typeof(int),
|
||||
oldType: "INTEGER");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_IgnoredLogChannels_LogSettingId",
|
||||
table: "IgnoredLogChannels",
|
||||
column: "LogSettingId");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_IgnoredLogChannels_LogSettings_LogSettingId",
|
||||
table: "IgnoredLogChannels",
|
||||
column: "LogSettingId",
|
||||
principalTable: "LogSettings",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Restrict);
|
||||
}
|
||||
}
|
||||
}
|
@@ -187,29 +187,6 @@ namespace NadekoBot.Migrations
|
||||
b.ToTable("FollowedStream");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.ImageOnlyChannel", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<ulong>("ChannelId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<DateTime?>("DateAdded")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<ulong>("GuildId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("ChannelId")
|
||||
.IsUnique();
|
||||
|
||||
b.ToTable("ImageOnlyChannels");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.AntiAltSetting", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
@@ -870,24 +847,28 @@ namespace NadekoBot.Migrations
|
||||
b.ToTable("GuildConfigs");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogChannel", b =>
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogItem", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<ulong>("ChannelId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<DateTime?>("DateAdded")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<int?>("LogSettingId")
|
||||
b.Property<int>("ItemType")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<ulong>("LogItemId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<int>("LogSettingId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("LogSettingId");
|
||||
b.HasIndex("LogSettingId", "LogItemId", "ItemType")
|
||||
.IsUnique();
|
||||
|
||||
b.ToTable("IgnoredLogChannels");
|
||||
});
|
||||
@@ -914,6 +895,29 @@ namespace NadekoBot.Migrations
|
||||
b.ToTable("IgnoredVoicePresenceCHannels");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.ImageOnlyChannel", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<ulong>("ChannelId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<DateTime?>("DateAdded")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<ulong>("GuildId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("ChannelId")
|
||||
.IsUnique();
|
||||
|
||||
b.ToTable("ImageOnlyChannels");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.LogSetting", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
@@ -2269,11 +2273,13 @@ namespace NadekoBot.Migrations
|
||||
b.Navigation("GuildConfig");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogChannel", b =>
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredLogItem", b =>
|
||||
{
|
||||
b.HasOne("NadekoBot.Services.Database.Models.LogSetting", "LogSetting")
|
||||
.WithMany("IgnoredChannels")
|
||||
.HasForeignKey("LogSettingId");
|
||||
.WithMany("LogIgnores")
|
||||
.HasForeignKey("LogSettingId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("LogSetting");
|
||||
});
|
||||
@@ -2281,7 +2287,7 @@ namespace NadekoBot.Migrations
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.IgnoredVoicePresenceChannel", b =>
|
||||
{
|
||||
b.HasOne("NadekoBot.Services.Database.Models.LogSetting", "LogSetting")
|
||||
.WithMany("IgnoredVoicePresenceChannelIds")
|
||||
.WithMany()
|
||||
.HasForeignKey("LogSettingId");
|
||||
|
||||
b.Navigation("LogSetting");
|
||||
@@ -2598,9 +2604,7 @@ namespace NadekoBot.Migrations
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.LogSetting", b =>
|
||||
{
|
||||
b.Navigation("IgnoredChannels");
|
||||
|
||||
b.Navigation("IgnoredVoicePresenceChannelIds");
|
||||
b.Navigation("LogIgnores");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.MusicPlaylist", b =>
|
||||
|
@@ -16,6 +16,7 @@ namespace NadekoBot.Modules.Administration
|
||||
[NadekoCommand, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[UserPerm(GuildPerm.ManageRoles)]
|
||||
[BotPerm(GuildPerm.ManageRoles)]
|
||||
public async Task AutoAssignRole([Leftover] IRole role)
|
||||
{
|
||||
var guser = (IGuildUser) ctx.User;
|
||||
@@ -47,6 +48,7 @@ namespace NadekoBot.Modules.Administration
|
||||
[NadekoCommand, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[UserPerm(GuildPerm.ManageRoles)]
|
||||
[BotPerm(GuildPerm.ManageRoles)]
|
||||
public async Task AutoAssignRole()
|
||||
{
|
||||
if (!_service.TryGetRoles(ctx.Guild.Id, out var roles))
|
||||
|
@@ -7,6 +7,7 @@ using NadekoBot.Services.Database.Models;
|
||||
using NadekoBot.Extensions;
|
||||
using NadekoBot.Modules.Administration.Services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@@ -18,12 +19,6 @@ namespace NadekoBot.Modules.Administration
|
||||
[NoPublicBot]
|
||||
public class LogCommands : NadekoSubmodule<ILogCommandService>
|
||||
{
|
||||
public enum EnableDisable
|
||||
{
|
||||
Enable,
|
||||
Disable
|
||||
}
|
||||
|
||||
[NadekoCommand, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[UserPerm(GuildPerm.Administrator)]
|
||||
@@ -43,14 +38,51 @@ namespace NadekoBot.Modules.Administration
|
||||
[OwnerOnly]
|
||||
public async Task LogIgnore()
|
||||
{
|
||||
var channel = (ITextChannel)ctx.Channel;
|
||||
var settings = _service.GetGuildLogSettings(ctx.Guild.Id);
|
||||
|
||||
var removed = _service.LogIgnore(ctx.Guild.Id, ctx.Channel.Id);
|
||||
var chs = settings?.LogIgnores.Where(x => x.ItemType == IgnoredItemType.Channel).ToList()
|
||||
?? new List<IgnoredLogItem>();
|
||||
var usrs = settings?.LogIgnores.Where(x => x.ItemType == IgnoredItemType.User).ToList()
|
||||
?? new List<IgnoredLogItem>();
|
||||
|
||||
var eb = _eb.Create(ctx)
|
||||
.WithOkColor()
|
||||
.AddField(GetText(strs.log_ignored_channels),
|
||||
chs.Count == 0 ? "-" : string.Join('\n', chs.Select(x => $"{x.LogItemId} | <#{x.LogItemId}>")))
|
||||
.AddField(GetText(strs.log_ignored_users),
|
||||
usrs.Count == 0 ? "-" : string.Join('\n', usrs.Select(x => $"{x.LogItemId} | <@{x.LogItemId}>")));
|
||||
|
||||
await ctx.Channel.EmbedAsync(eb);
|
||||
}
|
||||
|
||||
[NadekoCommand, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[UserPerm(GuildPerm.Administrator)]
|
||||
[OwnerOnly]
|
||||
public async Task LogIgnore([Leftover]ITextChannel target)
|
||||
{
|
||||
target ??= (ITextChannel)ctx.Channel;
|
||||
|
||||
var removed = _service.LogIgnore(ctx.Guild.Id, target.Id, IgnoredItemType.Channel);
|
||||
|
||||
if (!removed)
|
||||
await ReplyConfirmLocalizedAsync(strs.log_ignore(Format.Bold(channel.Mention + "(" + channel.Id + ")"))).ConfigureAwait(false);
|
||||
await ReplyConfirmLocalizedAsync(strs.log_ignore_chan(Format.Bold(target.Mention + "(" + target.Id + ")"))).ConfigureAwait(false);
|
||||
else
|
||||
await ReplyConfirmLocalizedAsync(strs.log_not_ignore(Format.Bold(channel.Mention + "(" + channel.Id + ")"))).ConfigureAwait(false);
|
||||
await ReplyConfirmLocalizedAsync(strs.log_not_ignore_chan(Format.Bold(target.Mention + "(" + target.Id + ")"))).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[UserPerm(GuildPerm.Administrator)]
|
||||
[OwnerOnly]
|
||||
public async Task LogIgnore([Leftover]IUser target)
|
||||
{
|
||||
var removed = _service.LogIgnore(ctx.Guild.Id, target.Id, IgnoredItemType.User);
|
||||
|
||||
if (!removed)
|
||||
await ReplyConfirmLocalizedAsync(strs.log_ignore_user(Format.Bold(target.Mention + "(" + target.Id + ")"))).ConfigureAwait(false);
|
||||
else
|
||||
await ReplyConfirmLocalizedAsync(strs.log_not_ignore_user(Format.Bold(target.Mention + "(" + target.Id + ")"))).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Aliases]
|
||||
|
@@ -6,6 +6,8 @@ using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Discord;
|
||||
using Discord.WebSocket;
|
||||
using LinqToDB;
|
||||
using LinqToDB.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using NadekoBot.Common.Collections;
|
||||
@@ -21,7 +23,7 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
{
|
||||
void AddDeleteIgnore(ulong xId);
|
||||
Task LogServer(ulong guildId, ulong channelId, bool actionValue);
|
||||
bool LogIgnore(ulong guildId, ulong channelId);
|
||||
bool LogIgnore(ulong guildId, ulong itemId, IgnoredItemType itemType);
|
||||
LogSetting GetGuildLogSettings(ulong guildId);
|
||||
bool Log(ulong guildId, ulong? channelId, LogType type);
|
||||
}
|
||||
@@ -37,7 +39,7 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public bool LogIgnore(ulong guildId, ulong channelId)
|
||||
public bool LogIgnore(ulong guildId, ulong itemId, IgnoredItemType itemType)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -97,7 +99,7 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
.AsQueryable()
|
||||
.AsNoTracking()
|
||||
.Where(x => guildIds.Contains(x.GuildId))
|
||||
.Include(ls => ls.IgnoredChannels)
|
||||
.Include(ls => ls.LogIgnores)
|
||||
.ToList();
|
||||
|
||||
GuildLogSettings = configs
|
||||
@@ -165,21 +167,23 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
_ignoreMessageIds.Add(messageId);
|
||||
}
|
||||
|
||||
public bool LogIgnore(ulong gid, ulong cid)
|
||||
public bool LogIgnore(ulong gid, ulong itemId, IgnoredItemType itemType)
|
||||
{
|
||||
int removed = 0;
|
||||
using (var uow = _db.GetDbContext())
|
||||
{
|
||||
var logSetting = uow.LogSettingsFor(gid);
|
||||
removed = logSetting.IgnoredChannels.RemoveWhere(ilc => ilc.ChannelId == cid);
|
||||
removed = logSetting.LogIgnores
|
||||
.RemoveAll(x => x.ItemType == itemType && itemId == x.LogItemId);
|
||||
|
||||
if (removed == 0)
|
||||
{
|
||||
var toAdd = new IgnoredLogChannel {ChannelId = cid};
|
||||
logSetting.IgnoredChannels.Add(toAdd);
|
||||
var toAdd = new IgnoredLogItem { LogItemId = itemId, ItemType = itemType};
|
||||
logSetting.LogIgnores.Add(toAdd);
|
||||
}
|
||||
|
||||
GuildLogSettings.AddOrUpdate(gid, logSetting, (_, _) => logSetting);
|
||||
uow.SaveChanges();
|
||||
GuildLogSettings.AddOrUpdate(gid, logSetting, (_, _) => logSetting);
|
||||
}
|
||||
|
||||
return removed > 0;
|
||||
@@ -580,7 +584,8 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!GuildLogSettings.TryGetValue(before.Guild.Id, out LogSetting logSetting))
|
||||
if (!GuildLogSettings.TryGetValue(before.Guild.Id, out LogSetting logSetting)
|
||||
|| logSetting.LogIgnores.Any(ilc => ilc.LogItemId == after.Id && ilc.ItemType == IgnoredItemType.User))
|
||||
return;
|
||||
|
||||
ITextChannel logChannel;
|
||||
@@ -682,7 +687,7 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
|
||||
if (!GuildLogSettings.TryGetValue(before.Guild.Id, out LogSetting logSetting)
|
||||
|| (logSetting.ChannelUpdatedId is null)
|
||||
|| logSetting.IgnoredChannels.Any(ilc => ilc.ChannelId == after.Id))
|
||||
|| logSetting.LogIgnores.Any(ilc => ilc.LogItemId == after.Id && ilc.ItemType == IgnoredItemType.Channel))
|
||||
return;
|
||||
|
||||
ITextChannel logChannel;
|
||||
@@ -733,7 +738,7 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
|
||||
if (!GuildLogSettings.TryGetValue(ch.Guild.Id, out LogSetting logSetting)
|
||||
|| (logSetting.ChannelDestroyedId is null)
|
||||
|| logSetting.IgnoredChannels.Any(ilc => ilc.ChannelId == ch.Id))
|
||||
|| logSetting.LogIgnores.Any(ilc => ilc.LogItemId == ch.Id && ilc.ItemType == IgnoredItemType.Channel))
|
||||
return;
|
||||
|
||||
ITextChannel logChannel;
|
||||
@@ -772,7 +777,7 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
return;
|
||||
|
||||
if (!GuildLogSettings.TryGetValue(ch.Guild.Id, out LogSetting logSetting)
|
||||
|| (logSetting.ChannelCreatedId is null))
|
||||
|| logSetting.ChannelCreatedId is null)
|
||||
return;
|
||||
|
||||
ITextChannel logChannel;
|
||||
@@ -817,7 +822,8 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
return;
|
||||
|
||||
if (!GuildLogSettings.TryGetValue(usr.Guild.Id, out LogSetting logSetting)
|
||||
|| (logSetting.LogVoicePresenceId is null))
|
||||
|| (logSetting.LogVoicePresenceId is null)
|
||||
|| logSetting.LogIgnores.Any(ilc => ilc.LogItemId == iusr.Id && ilc.ItemType == IgnoredItemType.User))
|
||||
return;
|
||||
|
||||
ITextChannel logChannel;
|
||||
@@ -862,49 +868,6 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
//private Task _client_UserPresenceUpdated(Optional<SocketGuild> optGuild, SocketUser usr, SocketPresence before, SocketPresence after)
|
||||
//{
|
||||
// var _ = Task.Run(async () =>
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// var guild = optGuild.GetValueOrDefault() ?? (usr as SocketGuildUser)?.Guild;
|
||||
|
||||
// if (guild is null)
|
||||
// return;
|
||||
|
||||
// if (!GuildLogSettings.TryGetValue(guild.Id, out LogSetting logSetting)
|
||||
// || (logSetting.LogUserPresenceId is null)
|
||||
// || before.Status == after.Status)
|
||||
// return;
|
||||
|
||||
// ITextChannel logChannel;
|
||||
// if ((logChannel = await TryGetLogChannel(guild, logSetting, LogType.UserPresence)) is null)
|
||||
// return;
|
||||
// string str = "";
|
||||
// if (before.Status != after.Status)
|
||||
// str = "🎭" + Format.Code(PrettyCurrentTime(g)) +
|
||||
// GetText(logChannel.Guild, strs.user_status_change(,
|
||||
// "👤" + Format.Bold(usr.Username),
|
||||
// Format.Bold(after.Status.ToString()));
|
||||
|
||||
// //if (before.Game?.Name != after.Game?.Name)
|
||||
// //{
|
||||
// // if (str != "")
|
||||
// // str += "\n";
|
||||
// // str += $"👾`{prettyCurrentTime}`👤__**{usr.Username}**__ is now playing **{after.Game?.Name}**.";
|
||||
// //}
|
||||
|
||||
// PresenceUpdates.AddOrUpdate(logChannel, new List<string>() { str }, (id, list) => { list.Add(str); return list; });
|
||||
// }
|
||||
// catch
|
||||
// {
|
||||
// // ignored
|
||||
// }
|
||||
// });
|
||||
// return Task.CompletedTask;
|
||||
//}
|
||||
|
||||
private Task _client_UserLeft(IGuildUser usr)
|
||||
{
|
||||
var _ = Task.Run(async () =>
|
||||
@@ -912,7 +875,8 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
try
|
||||
{
|
||||
if (!GuildLogSettings.TryGetValue(usr.Guild.Id, out LogSetting logSetting)
|
||||
|| (logSetting.UserLeftId is null))
|
||||
|| (logSetting.UserLeftId is null)
|
||||
|| logSetting.LogIgnores.Any(ilc => ilc.LogItemId == usr.Id && ilc.ItemType == IgnoredItemType.User))
|
||||
return;
|
||||
|
||||
ITextChannel logChannel;
|
||||
@@ -987,7 +951,8 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
try
|
||||
{
|
||||
if (!GuildLogSettings.TryGetValue(guild.Id, out LogSetting logSetting)
|
||||
|| (logSetting.UserUnbannedId is null))
|
||||
|| (logSetting.UserUnbannedId is null)
|
||||
|| logSetting.LogIgnores.Any(ilc => ilc.LogItemId == usr.Id && ilc.ItemType == IgnoredItemType.User))
|
||||
return;
|
||||
|
||||
ITextChannel logChannel;
|
||||
@@ -1021,7 +986,8 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
try
|
||||
{
|
||||
if (!GuildLogSettings.TryGetValue(guild.Id, out LogSetting logSetting)
|
||||
|| (logSetting.UserBannedId is null))
|
||||
|| (logSetting.UserBannedId is null)
|
||||
|| logSetting.LogIgnores.Any(ilc => ilc.LogItemId == usr.Id && ilc.ItemType == IgnoredItemType.User))
|
||||
return;
|
||||
|
||||
ITextChannel logChannel;
|
||||
@@ -1069,7 +1035,7 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
|
||||
if (!GuildLogSettings.TryGetValue(channel.Guild.Id, out LogSetting logSetting)
|
||||
|| (logSetting.MessageDeletedId is null)
|
||||
|| logSetting.IgnoredChannels.Any(ilc => ilc.ChannelId == channel.Id))
|
||||
|| logSetting.LogIgnores.Any(ilc => ilc.LogItemId == channel.Id && ilc.ItemType == IgnoredItemType.Channel))
|
||||
return;
|
||||
|
||||
ITextChannel logChannel;
|
||||
@@ -1127,7 +1093,7 @@ namespace NadekoBot.Modules.Administration.Services
|
||||
|
||||
if (!GuildLogSettings.TryGetValue(channel.Guild.Id, out LogSetting logSetting)
|
||||
|| (logSetting.MessageUpdatedId is null)
|
||||
|| logSetting.IgnoredChannels.Any(ilc => ilc.ChannelId == channel.Id))
|
||||
|| logSetting.LogIgnores.Any(ilc => ilc.LogItemId == channel.Id && ilc.ItemType == IgnoredItemType.Channel))
|
||||
return;
|
||||
|
||||
ITextChannel logChannel;
|
||||
|
@@ -1,14 +0,0 @@
|
||||
namespace NadekoBot.Modules.Gambling.Common.Waifu
|
||||
{
|
||||
public struct WaifuProfileTitle
|
||||
{
|
||||
public int Count { get; }
|
||||
public string Title { get; }
|
||||
|
||||
public WaifuProfileTitle(int count, string title)
|
||||
{
|
||||
Count = count;
|
||||
Title = title;
|
||||
}
|
||||
}
|
||||
}
|
@@ -17,11 +17,6 @@ namespace NadekoBot.Modules.Gambling
|
||||
[Group]
|
||||
public class CurrencyEventsCommands : GamblingSubmodule<CurrencyEventsService>
|
||||
{
|
||||
public enum OtherEvent
|
||||
{
|
||||
BotListUpvoters
|
||||
}
|
||||
|
||||
public CurrencyEventsCommands(GamblingConfigService gamblingConf) : base(gamblingConf)
|
||||
{
|
||||
}
|
||||
@@ -37,41 +32,36 @@ namespace NadekoBot.Modules.Gambling
|
||||
ctx.Channel.Id,
|
||||
ev,
|
||||
opts,
|
||||
GetEmbed
|
||||
).ConfigureAwait(false))
|
||||
GetEmbed))
|
||||
{
|
||||
await ReplyErrorLocalizedAsync(strs.start_event_fail).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private IEmbedBuilder GetEmbed(CurrencyEvent.Type type, EventOptions opts, long currentPot)
|
||||
{
|
||||
switch (type)
|
||||
return type switch
|
||||
{
|
||||
case CurrencyEvent.Type.Reaction:
|
||||
return _eb.Create()
|
||||
.WithOkColor()
|
||||
.WithTitle(GetText(strs.event_title(type.ToString())))
|
||||
.WithDescription(GetReactionDescription(opts.Amount, currentPot))
|
||||
.WithFooter(GetText(strs.event_duration_footer(opts.Hours)));
|
||||
case CurrencyEvent.Type.GameStatus:
|
||||
return _eb.Create()
|
||||
.WithOkColor()
|
||||
.WithTitle(GetText(strs.event_title(type.ToString())))
|
||||
.WithDescription(GetGameStatusDescription(opts.Amount, currentPot))
|
||||
.WithFooter(GetText(strs.event_duration_footer(opts.Hours)));
|
||||
default:
|
||||
break;
|
||||
}
|
||||
throw new ArgumentOutOfRangeException(nameof(type));
|
||||
CurrencyEvent.Type.Reaction => _eb.Create()
|
||||
.WithOkColor()
|
||||
.WithTitle(GetText(strs.event_title(type.ToString())))
|
||||
.WithDescription(GetReactionDescription(opts.Amount, currentPot))
|
||||
.WithFooter(GetText(strs.event_duration_footer(opts.Hours))),
|
||||
CurrencyEvent.Type.GameStatus => _eb.Create()
|
||||
.WithOkColor()
|
||||
.WithTitle(GetText(strs.event_title(type.ToString())))
|
||||
.WithDescription(GetGameStatusDescription(opts.Amount, currentPot))
|
||||
.WithFooter(GetText(strs.event_duration_footer(opts.Hours))),
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(type))
|
||||
};
|
||||
}
|
||||
|
||||
private string GetReactionDescription(long amount, long potSize)
|
||||
{
|
||||
string potSizeStr = Format.Bold(potSize == 0
|
||||
var potSizeStr = Format.Bold(potSize == 0
|
||||
? "∞" + CurrencySign
|
||||
: potSize.ToString() + CurrencySign);
|
||||
: potSize + CurrencySign);
|
||||
|
||||
return GetText(strs.new_reaction_event(
|
||||
CurrencySign,
|
||||
Format.Bold(amount + CurrencySign),
|
||||
@@ -80,9 +70,10 @@ namespace NadekoBot.Modules.Gambling
|
||||
|
||||
private string GetGameStatusDescription(long amount, long potSize)
|
||||
{
|
||||
string potSizeStr = Format.Bold(potSize == 0
|
||||
var potSizeStr = Format.Bold(potSize == 0
|
||||
? "∞" + CurrencySign
|
||||
: potSize.ToString() + CurrencySign);
|
||||
: potSize + CurrencySign);
|
||||
|
||||
return GetText(strs.new_gamestatus_event(
|
||||
CurrencySign,
|
||||
Format.Bold(amount + CurrencySign),
|
||||
|
@@ -225,6 +225,9 @@ namespace NadekoBot.Modules.Gambling
|
||||
[BotPerm(GuildPerm.ManageRoles)]
|
||||
public async Task ShopAdd(Role _, int price, [Leftover] IRole role)
|
||||
{
|
||||
if (price < 1)
|
||||
return;
|
||||
|
||||
var entry = new ShopEntry()
|
||||
{
|
||||
Name = "-",
|
||||
@@ -252,8 +255,11 @@ namespace NadekoBot.Modules.Gambling
|
||||
[NadekoCommand, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[UserPerm(GuildPerm.Administrator)]
|
||||
public async Task ShopAdd(List _, int price, [Leftover]string name)
|
||||
public async Task ShopAdd(List _, int price, [Leftover] string name)
|
||||
{
|
||||
if (price < 1)
|
||||
return;
|
||||
|
||||
var entry = new ShopEntry()
|
||||
{
|
||||
Name = name.TrimTo(100),
|
||||
@@ -266,13 +272,14 @@ namespace NadekoBot.Modules.Gambling
|
||||
{
|
||||
var entries = new IndexedCollection<ShopEntry>(uow.GuildConfigsForId(ctx.Guild.Id,
|
||||
set => set.Include(x => x.ShopEntries)
|
||||
.ThenInclude(x => x.Items)).ShopEntries)
|
||||
.ThenInclude(x => x.Items)).ShopEntries)
|
||||
{
|
||||
entry
|
||||
};
|
||||
uow.GuildConfigsForId(ctx.Guild.Id, set => set).ShopEntries = entries;
|
||||
uow.SaveChanges();
|
||||
}
|
||||
|
||||
await ctx.Channel.EmbedAsync(EntryToEmbed(entry)
|
||||
.WithTitle(GetText(strs.shop_item_add))).ConfigureAwait(false);
|
||||
}
|
||||
|
@@ -0,0 +1,72 @@
|
||||
#nullable enable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using NadekoBot.Common;
|
||||
using NadekoBot.Common.Yml;
|
||||
using Serilog;
|
||||
|
||||
namespace NadekoBot.Modules.Games.Hangman
|
||||
{
|
||||
public sealed class DefaultHangmanSource : IHangmanSource
|
||||
{
|
||||
private IReadOnlyDictionary<string, HangmanTerm[]> _terms = new Dictionary<string, HangmanTerm[]>();
|
||||
private readonly Random _rng;
|
||||
|
||||
public DefaultHangmanSource()
|
||||
{
|
||||
_rng = new NadekoRandom();
|
||||
Reload();
|
||||
}
|
||||
|
||||
public void Reload()
|
||||
{
|
||||
if (!Directory.Exists("data/hangman"))
|
||||
{
|
||||
Log.Error("Hangman game won't work. Folder 'data/hangman' is missing.");
|
||||
return;
|
||||
}
|
||||
|
||||
var qs = new Dictionary<string, HangmanTerm[]>();
|
||||
foreach (var file in Directory.EnumerateFiles("data/hangman/", "*.yml"))
|
||||
{
|
||||
try
|
||||
{
|
||||
var data = Yaml.Deserializer.Deserialize<HangmanTerm[]>(File.ReadAllText(file));
|
||||
qs[Path.GetFileNameWithoutExtension(file).ToLowerInvariant()] = data;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error(ex, "Loading {HangmanFile} failed.", file);
|
||||
}
|
||||
}
|
||||
|
||||
_terms = qs;
|
||||
|
||||
Log.Information("Loaded {HangmanCategoryCount} hangman categories.", qs.Count);
|
||||
}
|
||||
|
||||
public IReadOnlyCollection<string> GetCategories()
|
||||
=> _terms.Keys.ToList();
|
||||
|
||||
public bool GetTerm(string? category, [NotNullWhen(true)] out HangmanTerm? term)
|
||||
{
|
||||
if (category is null)
|
||||
{
|
||||
var cats = GetCategories();
|
||||
category = cats.ElementAt(_rng.Next(0, cats.Count));
|
||||
}
|
||||
|
||||
if (_terms.TryGetValue(category, out var terms))
|
||||
{
|
||||
term = terms[_rng.Next(0, terms.Length)];
|
||||
return true;
|
||||
}
|
||||
|
||||
term = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,19 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace NadekoBot.Modules.Games.Common.Hangman.Exceptions
|
||||
{
|
||||
public class TermNotFoundException : Exception
|
||||
{
|
||||
public TermNotFoundException() : base("Term of that type couldn't be found")
|
||||
{
|
||||
}
|
||||
|
||||
public TermNotFoundException(string message) : base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public TermNotFoundException(string message, Exception innerException) : base(message, innerException)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,170 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using NadekoBot.Extensions;
|
||||
|
||||
namespace NadekoBot.Modules.Games.Common.Hangman
|
||||
{
|
||||
public sealed class Hangman : IDisposable
|
||||
{
|
||||
public string TermType { get; }
|
||||
public TermPool TermPool { get; }
|
||||
public HangmanObject Term { get; }
|
||||
|
||||
public string ScrambledWord => "`" + String.Concat(Term.Word.Select(c =>
|
||||
{
|
||||
if (c == ' ')
|
||||
return " \u2000";
|
||||
if (!(char.IsLetter(c) || char.IsDigit(c)))
|
||||
return $" {c}";
|
||||
|
||||
c = char.ToLowerInvariant(c);
|
||||
return _previousGuesses.Contains(c) ? $" {c}" : " ◯";
|
||||
})) + "`";
|
||||
|
||||
private Phase _currentPhase = Phase.Active;
|
||||
public Phase CurrentPhase
|
||||
{
|
||||
get => _currentPhase;
|
||||
set
|
||||
{
|
||||
if (value == Phase.Ended)
|
||||
_endingCompletionSource.TrySetResult(true);
|
||||
|
||||
_currentPhase = value;
|
||||
}
|
||||
}
|
||||
|
||||
private readonly SemaphoreSlim _locker = new SemaphoreSlim(1, 1);
|
||||
|
||||
private readonly HashSet<ulong> _recentUsers = new HashSet<ulong>();
|
||||
|
||||
public uint Errors { get; private set; } = 0;
|
||||
public uint MaxErrors { get; } = 6;
|
||||
|
||||
public event Func<Hangman, string, ulong, Task> OnGameEnded = delegate { return Task.CompletedTask; };
|
||||
public event Func<Hangman, string, char, Task> OnLetterAlreadyUsed = delegate { return Task.CompletedTask; };
|
||||
public event Func<Hangman, string, char, Task> OnGuessFailed = delegate { return Task.CompletedTask; };
|
||||
public event Func<Hangman, string, char, Task> OnGuessSucceeded = delegate { return Task.CompletedTask; };
|
||||
|
||||
private readonly HashSet<char> _previousGuesses = new HashSet<char>();
|
||||
public ImmutableArray<char> PreviousGuesses => _previousGuesses.ToImmutableArray();
|
||||
|
||||
private readonly TaskCompletionSource<bool> _endingCompletionSource = new TaskCompletionSource<bool>();
|
||||
|
||||
public Task EndedTask => _endingCompletionSource.Task;
|
||||
|
||||
public Hangman(string type, TermPool tp = null)
|
||||
{
|
||||
this.TermType = type.Trim().ToLowerInvariant().ToTitleCase();
|
||||
this.TermPool = tp ?? new TermPool();
|
||||
this.Term = this.TermPool.GetTerm(type);
|
||||
}
|
||||
|
||||
private void AddError()
|
||||
{
|
||||
if (++Errors > MaxErrors)
|
||||
{
|
||||
var _ = OnGameEnded(this, null, 0);
|
||||
CurrentPhase = Phase.Ended;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetHangman() => $@". ┌─────┐
|
||||
.┃...............┋
|
||||
.┃...............┋
|
||||
.┃{(Errors > 0 ? ".............😲" : "")}
|
||||
.┃{(Errors > 1 ? "............./" : "")} {(Errors > 2 ? "|" : "")} {(Errors > 3 ? "\\" : "")}
|
||||
.┃{(Errors > 4 ? "............../" : "")} {(Errors > 5 ? "\\" : "")}
|
||||
/-\";
|
||||
|
||||
public async Task Input(ulong userId, string userName, string input)
|
||||
{
|
||||
if (CurrentPhase == Phase.Ended)
|
||||
return;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(input))
|
||||
return;
|
||||
|
||||
input = input.Trim().ToLowerInvariant();
|
||||
|
||||
await _locker.WaitAsync().ConfigureAwait(false);
|
||||
try
|
||||
{
|
||||
if (CurrentPhase == Phase.Ended)
|
||||
return;
|
||||
|
||||
if (input.Length > 1) // tried to guess the whole word
|
||||
{
|
||||
if (input != Term.Word) // failed
|
||||
return;
|
||||
|
||||
var _ = OnGameEnded?.Invoke(this, userName, userId);
|
||||
CurrentPhase = Phase.Ended;
|
||||
return;
|
||||
}
|
||||
|
||||
var ch = input[0];
|
||||
|
||||
if (!char.IsLetterOrDigit(ch))
|
||||
return;
|
||||
|
||||
if (!_recentUsers.Add(userId)) // don't let a single user spam guesses
|
||||
return;
|
||||
|
||||
if (!_previousGuesses.Add(ch)) // that letter was already guessed
|
||||
{
|
||||
var _ = OnLetterAlreadyUsed?.Invoke(this, userName, ch);
|
||||
}
|
||||
else if (!Term.Word.Contains(ch)) // guessed letter doesn't exist
|
||||
{
|
||||
var _ = OnGuessFailed?.Invoke(this, userName, ch);
|
||||
AddError();
|
||||
}
|
||||
else if (Term.Word.All(x => _previousGuesses.IsSupersetOf(Term.Word.ToLowerInvariant()
|
||||
.Where(char.IsLetterOrDigit))))
|
||||
{
|
||||
var _ = OnGameEnded.Invoke(this, userName, userId); // if all letters are guessed
|
||||
CurrentPhase = Phase.Ended;
|
||||
}
|
||||
else // guessed but not last letter
|
||||
{
|
||||
var _ = OnGuessSucceeded?.Invoke(this, userName, ch);
|
||||
_recentUsers.Remove(userId); // he can guess again right away
|
||||
return;
|
||||
}
|
||||
|
||||
var clearSpam = Task.Run(async () =>
|
||||
{
|
||||
await Task.Delay(3000).ConfigureAwait(false); // remove the user from the spamlist after 5 seconds
|
||||
_recentUsers.Remove(userId);
|
||||
});
|
||||
}
|
||||
finally { _locker.Release(); }
|
||||
}
|
||||
|
||||
public async Task Stop()
|
||||
{
|
||||
await _locker.WaitAsync().ConfigureAwait(false);
|
||||
try
|
||||
{
|
||||
CurrentPhase = Phase.Ended;
|
||||
}
|
||||
finally { _locker.Release(); }
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
OnGameEnded = null;
|
||||
OnGuessFailed = null;
|
||||
OnGuessSucceeded = null;
|
||||
OnLetterAlreadyUsed = null;
|
||||
_previousGuesses.Clear();
|
||||
_recentUsers.Clear();
|
||||
// _locker.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
122
src/NadekoBot/Modules/Games/Common/Hangman/HangmanGame.cs
Normal file
122
src/NadekoBot/Modules/Games/Common/Hangman/HangmanGame.cs
Normal file
@@ -0,0 +1,122 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using AngleSharp.Text;
|
||||
|
||||
namespace NadekoBot.Modules.Games.Hangman
|
||||
{
|
||||
public sealed class HangmanGame
|
||||
{
|
||||
public enum Phase { Running, Ended }
|
||||
public enum GuessResult { NoAction, AlreadyTried, Incorrect, Guess, Win }
|
||||
|
||||
public record State(
|
||||
int Errors,
|
||||
Phase Phase,
|
||||
string Word,
|
||||
GuessResult GuessResult,
|
||||
List<char> missedLetters,
|
||||
string ImageUrl)
|
||||
{
|
||||
public bool Failed => Errors > 5;
|
||||
}
|
||||
|
||||
private Phase CurrentPhase { get; set; }
|
||||
|
||||
private readonly HashSet<char> _incorrect = new();
|
||||
private readonly HashSet<char> _correct = new();
|
||||
private readonly HashSet<char> _remaining = new();
|
||||
|
||||
private readonly string _word;
|
||||
private readonly string _imageUrl;
|
||||
|
||||
public HangmanGame(HangmanTerm term)
|
||||
{
|
||||
_word = term.Word;
|
||||
_imageUrl = term.ImageUrl;
|
||||
|
||||
_remaining = _word
|
||||
.ToLowerInvariant()
|
||||
.Where(x => x.IsLetter())
|
||||
.Select(char.ToLowerInvariant)
|
||||
.ToHashSet();
|
||||
}
|
||||
|
||||
public State GetState(GuessResult guessResult = GuessResult.NoAction)
|
||||
=> new State(_incorrect.Count,
|
||||
CurrentPhase,
|
||||
CurrentPhase == Phase.Ended
|
||||
? _word
|
||||
: GetScrambledWord(),
|
||||
guessResult,
|
||||
_incorrect.ToList(),
|
||||
CurrentPhase == Phase.Ended
|
||||
? _imageUrl
|
||||
: string.Empty);
|
||||
|
||||
private string GetScrambledWord()
|
||||
{
|
||||
Span<char> output = stackalloc char[_word.Length * 2];
|
||||
for (var i = 0; i < _word.Length; i++)
|
||||
{
|
||||
var ch = _word[i];
|
||||
if (ch == ' ')
|
||||
output[i*2] = ' ';
|
||||
if (!ch.IsLetter() || !_remaining.Contains(char.ToLowerInvariant(ch)))
|
||||
output[i*2] = ch;
|
||||
else
|
||||
output[i*2] = '_';
|
||||
|
||||
output[i * 2 + 1] = ' ';
|
||||
}
|
||||
|
||||
return new(output);
|
||||
}
|
||||
|
||||
// todo lock
|
||||
public State Guess(string guess)
|
||||
{
|
||||
if (CurrentPhase != Phase.Running)
|
||||
return GetState(GuessResult.NoAction);
|
||||
|
||||
guess = guess.Trim();
|
||||
if (guess.Length > 1)
|
||||
{
|
||||
if (guess.Equals(_word, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
CurrentPhase = Phase.Ended;
|
||||
return GetState(GuessResult.Win);
|
||||
}
|
||||
|
||||
return GetState(GuessResult.NoAction);
|
||||
}
|
||||
|
||||
var charGuess = guess[0];
|
||||
if (!char.IsLetter(charGuess))
|
||||
return GetState(GuessResult.NoAction);
|
||||
|
||||
if (_incorrect.Contains(charGuess) || _correct.Contains(charGuess))
|
||||
return GetState(GuessResult.AlreadyTried);
|
||||
|
||||
if (_remaining.Remove(charGuess))
|
||||
{
|
||||
if (_remaining.Count == 0)
|
||||
{
|
||||
CurrentPhase = Phase.Ended;
|
||||
return GetState(GuessResult.Win);
|
||||
}
|
||||
|
||||
return GetState(GuessResult.Guess);
|
||||
}
|
||||
|
||||
_incorrect.Add(charGuess);
|
||||
if (_incorrect.Count > 5)
|
||||
{
|
||||
CurrentPhase = Phase.Ended;
|
||||
return GetState(GuessResult.Incorrect);
|
||||
}
|
||||
|
||||
return GetState(GuessResult.Incorrect);
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,17 +0,0 @@
|
||||
using NadekoBot.Extensions;
|
||||
|
||||
namespace NadekoBot.Modules.Games.Common.Hangman
|
||||
{
|
||||
public class HangmanObject
|
||||
{
|
||||
public string Word { get; set; }
|
||||
public string ImageUrl { get; set; }
|
||||
|
||||
public string GetWord()
|
||||
{
|
||||
var term = Word.ToTitleCase();
|
||||
|
||||
return $"[{term}](https://en.wikipedia.org/wiki/{term.Replace(' ', '_')})";
|
||||
}
|
||||
}
|
||||
}
|
147
src/NadekoBot/Modules/Games/Common/Hangman/HangmanService.cs
Normal file
147
src/NadekoBot/Modules/Games/Common/Hangman/HangmanService.cs
Normal file
@@ -0,0 +1,147 @@
|
||||
#nullable enable
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Threading.Tasks;
|
||||
using Discord;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using NadekoBot.Common.ModuleBehaviors;
|
||||
using NadekoBot.Extensions;
|
||||
using NadekoBot.Modules.Games.Services;
|
||||
using NadekoBot.Services;
|
||||
|
||||
namespace NadekoBot.Modules.Games.Hangman
|
||||
{
|
||||
public sealed class HangmanService : IHangmanService, ILateExecutor
|
||||
{
|
||||
private readonly ConcurrentDictionary<ulong, HangmanGame> _hangmanGames = new();
|
||||
private readonly IHangmanSource _source;
|
||||
private readonly IEmbedBuilderService _eb;
|
||||
private readonly GamesConfigService _gcs;
|
||||
private readonly ICurrencyService _cs;
|
||||
private readonly IMemoryCache _cdCache;
|
||||
private readonly object _locker = new();
|
||||
|
||||
public HangmanService(IHangmanSource source, IEmbedBuilderService eb, GamesConfigService gcs,
|
||||
ICurrencyService cs, IMemoryCache cdCache)
|
||||
{
|
||||
_source = source;
|
||||
_eb = eb;
|
||||
_gcs = gcs;
|
||||
_cs = cs;
|
||||
_cdCache = cdCache;
|
||||
}
|
||||
|
||||
public bool StartHangman(
|
||||
ulong channelId,
|
||||
string? category,
|
||||
[NotNullWhen(true)] out HangmanGame.State? state)
|
||||
{
|
||||
state = null;
|
||||
if (!_source.GetTerm(category, out var term))
|
||||
return false;
|
||||
|
||||
|
||||
var game = new HangmanGame(term);
|
||||
lock (_locker)
|
||||
{
|
||||
var hc = _hangmanGames.GetOrAdd(channelId, game);
|
||||
if (hc == game)
|
||||
{
|
||||
state = hc.GetState();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public ValueTask<bool> StopHangman(ulong channelId)
|
||||
{
|
||||
lock (_locker)
|
||||
{
|
||||
if (_hangmanGames.TryRemove(channelId, out var game))
|
||||
{
|
||||
return new(true);
|
||||
}
|
||||
}
|
||||
|
||||
return new(false);
|
||||
}
|
||||
|
||||
public IReadOnlyCollection<string> GetHangmanTypes()
|
||||
=> _source.GetCategories();
|
||||
|
||||
public async Task LateExecute(IGuild guild, IUserMessage msg)
|
||||
{
|
||||
if (_hangmanGames.ContainsKey(msg.Channel.Id))
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(msg.Content))
|
||||
return;
|
||||
|
||||
if (_cdCache.TryGetValue(msg.Author.Id, out _))
|
||||
return;
|
||||
|
||||
HangmanGame.State state;
|
||||
long rew = 0;
|
||||
lock (_locker)
|
||||
{
|
||||
if (!_hangmanGames.TryGetValue(msg.Channel.Id, out var game))
|
||||
return;
|
||||
|
||||
state = game.Guess(msg.Content.ToLowerInvariant());
|
||||
|
||||
if (state.GuessResult == HangmanGame.GuessResult.NoAction)
|
||||
return;
|
||||
|
||||
if (state.GuessResult == HangmanGame.GuessResult.Incorrect
|
||||
|| state.GuessResult == HangmanGame.GuessResult.AlreadyTried)
|
||||
{
|
||||
_cdCache.Set(msg.Author.Id, string.Empty, new MemoryCacheEntryOptions()
|
||||
{
|
||||
AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(3)
|
||||
});
|
||||
}
|
||||
|
||||
if (state.Phase == HangmanGame.Phase.Ended)
|
||||
if (_hangmanGames.TryRemove(msg.Channel.Id, out _))
|
||||
rew = _gcs.Data.Hangman.CurrencyReward;
|
||||
}
|
||||
|
||||
if (rew > 0)
|
||||
await _cs.AddAsync(msg.Author, "hangman win", rew, gamble: true);
|
||||
|
||||
await SendState((ITextChannel)msg.Channel, msg.Author, msg.Content, state);
|
||||
}
|
||||
}
|
||||
|
||||
private Task<IUserMessage> SendState(ITextChannel channel, IUser user, string content, HangmanGame.State state)
|
||||
{
|
||||
var embed = Games.HangmanCommands.GetEmbed(_eb, state);
|
||||
if (state.GuessResult == HangmanGame.GuessResult.Guess)
|
||||
embed.WithDescription($"{user} guessed the letter {content}!")
|
||||
.WithOkColor();
|
||||
else if (state.GuessResult == HangmanGame.GuessResult.Incorrect && state.Failed)
|
||||
embed.WithDescription($"{user} Letter {content} doesn't exist! Game over!")
|
||||
.WithErrorColor();
|
||||
else if (state.GuessResult == HangmanGame.GuessResult.Incorrect)
|
||||
embed.WithDescription($"{user} Letter {content} doesn't exist!")
|
||||
.WithErrorColor();
|
||||
else if (state.GuessResult == HangmanGame.GuessResult.AlreadyTried)
|
||||
embed.WithDescription($"{user} Letter {content} has already been used.")
|
||||
.WithPendingColor();
|
||||
else if (state.GuessResult == HangmanGame.GuessResult.Win)
|
||||
embed.WithDescription($"{user} won!")
|
||||
.WithOkColor();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(state.ImageUrl)
|
||||
&& Uri.IsWellFormedUriString(state.ImageUrl, UriKind.Absolute))
|
||||
{
|
||||
embed.WithImageUrl(state.ImageUrl);
|
||||
}
|
||||
|
||||
return channel.EmbedAsync(embed);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
namespace NadekoBot.Modules.Games.Hangman
|
||||
{
|
||||
public sealed class HangmanTerm
|
||||
{
|
||||
public string Word { get; set; }
|
||||
public string ImageUrl { get; set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,14 @@
|
||||
#nullable enable
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NadekoBot.Modules.Games.Hangman
|
||||
{
|
||||
public interface IHangmanService
|
||||
{
|
||||
bool StartHangman(ulong channelId, string? category, [NotNullWhen(true)] out HangmanGame.State? hangmanController);
|
||||
ValueTask<bool> StopHangman(ulong channelId);
|
||||
IReadOnlyCollection<string> GetHangmanTypes();
|
||||
}
|
||||
}
|
14
src/NadekoBot/Modules/Games/Common/Hangman/IHangmanSource.cs
Normal file
14
src/NadekoBot/Modules/Games/Common/Hangman/IHangmanSource.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
#nullable enable
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using NadekoBot.Services;
|
||||
|
||||
namespace NadekoBot.Modules.Games.Hangman
|
||||
{
|
||||
public interface IHangmanSource : INService
|
||||
{
|
||||
public IReadOnlyCollection<string> GetCategories();
|
||||
public void Reload();
|
||||
public bool GetTerm(string? category, [NotNullWhen(true)] out HangmanTerm? term);
|
||||
}
|
||||
}
|
@@ -1,8 +0,0 @@
|
||||
namespace NadekoBot.Modules.Games.Common.Hangman
|
||||
{
|
||||
public enum Phase
|
||||
{
|
||||
Active,
|
||||
Ended,
|
||||
}
|
||||
}
|
@@ -1,50 +0,0 @@
|
||||
using NadekoBot.Common;
|
||||
using NadekoBot.Modules.Games.Common.Hangman.Exceptions;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Serilog;
|
||||
|
||||
namespace NadekoBot.Modules.Games.Common.Hangman
|
||||
{
|
||||
public class TermPool
|
||||
{
|
||||
const string termsPath = "data/hangman.json";
|
||||
|
||||
public IReadOnlyDictionary<string, HangmanObject[]> Data { get; } = new Dictionary<string, HangmanObject[]>();
|
||||
public TermPool()
|
||||
{
|
||||
try
|
||||
{
|
||||
Data = JsonConvert.DeserializeObject<Dictionary<string, HangmanObject[]>>(File.ReadAllText(termsPath));
|
||||
Data = Data.ToDictionary(
|
||||
x => x.Key.ToLowerInvariant(),
|
||||
x => x.Value);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Warning(ex, "Error loading Hangman Term pool");
|
||||
}
|
||||
}
|
||||
|
||||
public HangmanObject GetTerm(string type)
|
||||
{
|
||||
type = type?.Trim().ToLowerInvariant();
|
||||
var rng = new NadekoRandom();
|
||||
|
||||
if (type == "random")
|
||||
{
|
||||
type = Data.Keys.ToArray()[rng.Next(0, Data.Keys.Count())];
|
||||
}
|
||||
if (!Data.TryGetValue(type, out var termTypes) || termTypes.Length == 0)
|
||||
throw new TermNotFoundException();
|
||||
|
||||
var obj = termTypes[rng.Next(0, termTypes.Length)];
|
||||
|
||||
obj.Word = obj.Word.Trim().ToLowerInvariant();
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,14 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace NadekoBot.Modules.Games.Common.Hangman
|
||||
{
|
||||
[Flags]
|
||||
public enum TermTypes
|
||||
{
|
||||
Countries = 0,
|
||||
Movies = 1,
|
||||
Animals = 2,
|
||||
Things = 4,
|
||||
Random = 8,
|
||||
}
|
||||
}
|
@@ -1,13 +1,10 @@
|
||||
#nullable enable
|
||||
using Discord.Commands;
|
||||
using NadekoBot.Extensions;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Discord;
|
||||
using Discord.WebSocket;
|
||||
using NadekoBot.Common.Attributes;
|
||||
using NadekoBot.Modules.Games.Common.Hangman;
|
||||
using NadekoBot.Modules.Games.Services;
|
||||
using NadekoBot.Modules.Games.Common.Hangman.Exceptions;
|
||||
using NadekoBot.Extensions;
|
||||
using NadekoBot.Modules.Games.Hangman;
|
||||
using NadekoBot.Services;
|
||||
|
||||
namespace NadekoBot.Modules.Games
|
||||
@@ -15,136 +12,74 @@ namespace NadekoBot.Modules.Games
|
||||
public partial class Games
|
||||
{
|
||||
[Group]
|
||||
public class HangmanCommands : NadekoSubmodule<GamesService>
|
||||
public class HangmanCommands : NadekoSubmodule<IHangmanService>
|
||||
{
|
||||
private readonly DiscordSocketClient _client;
|
||||
private readonly ICurrencyService _cs;
|
||||
private readonly GamesConfigService _gcs;
|
||||
|
||||
public HangmanCommands(DiscordSocketClient client, ICurrencyService cs, GamesConfigService gcs)
|
||||
{
|
||||
_client = client;
|
||||
_cs = cs;
|
||||
_gcs = gcs;
|
||||
}
|
||||
|
||||
[NadekoCommand, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
public async Task Hangmanlist()
|
||||
{
|
||||
await SendConfirmAsync(Format.Code(GetText(strs.hangman_types(Prefix)) + "\n" + string.Join("\n", _service.TermPool.Data.Keys)));
|
||||
await SendConfirmAsync(
|
||||
GetText(strs.hangman_types(Prefix)),
|
||||
_service.GetHangmanTypes().JoinWith('\n'));
|
||||
}
|
||||
|
||||
private static string Draw(HangmanGame.State state)
|
||||
{
|
||||
return $@". ┌─────┐
|
||||
.┃...............┋
|
||||
.┃...............┋
|
||||
.┃{(state.Errors > 0 ? ".............😲" : "")}
|
||||
.┃{(state.Errors > 1 ? "............./" : "")} {(state.Errors > 2 ? "|" : "")} {(state.Errors > 3 ? "\\" : "")}
|
||||
.┃{(state.Errors > 4 ? "............../" : "")} {(state.Errors > 5 ? "\\" : "")}
|
||||
/-\";
|
||||
}
|
||||
|
||||
public static IEmbedBuilder GetEmbed(IEmbedBuilderService eb, HangmanGame.State state)
|
||||
{
|
||||
if (state.Phase == HangmanGame.Phase.Running)
|
||||
return eb.Create()
|
||||
.WithOkColor()
|
||||
.AddField("Hangman", Draw(state))
|
||||
.AddField("Guess", Format.Code(state.Word))
|
||||
.WithFooter(state.missedLetters.JoinWith(' '));
|
||||
|
||||
if (state.Phase == HangmanGame.Phase.Ended && state.Failed)
|
||||
return eb.Create()
|
||||
.WithErrorColor()
|
||||
.AddField("Hangman", Draw(state))
|
||||
.AddField("Guess", Format.Code(state.Word))
|
||||
.WithFooter(state.missedLetters.JoinWith(' '));
|
||||
else
|
||||
{
|
||||
return eb.Create()
|
||||
.WithOkColor()
|
||||
.AddField("Hangman", Draw(state))
|
||||
.AddField("Guess", Format.Code(state.Word))
|
||||
.WithFooter(state.missedLetters.JoinWith(' '));
|
||||
}
|
||||
}
|
||||
|
||||
[NadekoCommand, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
public async Task Hangman([Leftover]string type = "random")
|
||||
public async Task Hangman([Leftover] string? type = null)
|
||||
{
|
||||
Hangman hm;
|
||||
try
|
||||
{
|
||||
hm = new Hangman(type, _service.TermPool);
|
||||
}
|
||||
catch (TermNotFoundException)
|
||||
if (!_service.StartHangman(ctx.Channel.Id, type, out var hangman))
|
||||
{
|
||||
await ReplyErrorLocalizedAsync(strs.hangman_running);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_service.HangmanGames.TryAdd(ctx.Channel.Id, hm))
|
||||
{
|
||||
hm.Dispose();
|
||||
await ReplyErrorLocalizedAsync(strs.hangman_running).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
hm.OnGameEnded += Hm_OnGameEnded;
|
||||
hm.OnGuessFailed += Hm_OnGuessFailed;
|
||||
hm.OnGuessSucceeded += Hm_OnGuessSucceeded;
|
||||
hm.OnLetterAlreadyUsed += Hm_OnLetterAlreadyUsed;
|
||||
_client.MessageReceived += _client_MessageReceived;
|
||||
|
||||
try
|
||||
{
|
||||
await SendConfirmAsync(GetText(strs.hangman_game_started) + $" ({hm.TermType})",
|
||||
hm.ScrambledWord + "\n" + hm.GetHangman())
|
||||
.ConfigureAwait(false);
|
||||
}
|
||||
catch { }
|
||||
|
||||
await hm.EndedTask.ConfigureAwait(false);
|
||||
|
||||
_client.MessageReceived -= _client_MessageReceived;
|
||||
_service.HangmanGames.TryRemove(ctx.Channel.Id, out _);
|
||||
hm.Dispose();
|
||||
|
||||
Task _client_MessageReceived(SocketMessage msg)
|
||||
{
|
||||
var _ = Task.Run(() =>
|
||||
{
|
||||
if (ctx.Channel.Id == msg.Channel.Id && !msg.Author.IsBot)
|
||||
return hm.Input(msg.Author.Id, msg.Author.ToString(), msg.Content);
|
||||
else
|
||||
return Task.CompletedTask;
|
||||
});
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
|
||||
Task Hm_OnGameEnded(Hangman game, string winner, ulong userId)
|
||||
{
|
||||
if (winner is null)
|
||||
{
|
||||
var loseEmbed = _eb.Create().WithTitle($"Hangman Game ({game.TermType}) - Ended")
|
||||
.WithDescription(Format.Bold("You lose."))
|
||||
.AddField("It was", game.Term.GetWord())
|
||||
.WithFooter(string.Join(" ", game.PreviousGuesses))
|
||||
.WithErrorColor();
|
||||
|
||||
if (Uri.IsWellFormedUriString(game.Term.ImageUrl, UriKind.Absolute))
|
||||
loseEmbed.WithImageUrl(game.Term.ImageUrl);
|
||||
|
||||
return ctx.Channel.EmbedAsync(loseEmbed);
|
||||
}
|
||||
|
||||
var reward = _gcs.Data.Hangman.CurrencyReward;
|
||||
if (reward > 0)
|
||||
_cs.AddAsync(userId, "hangman win", reward, true);
|
||||
|
||||
var winEmbed = _eb.Create().WithTitle($"Hangman Game ({game.TermType}) - Ended")
|
||||
.WithDescription(Format.Bold($"{winner} Won."))
|
||||
.AddField("It was", game.Term.GetWord())
|
||||
.WithFooter(string.Join(" ", game.PreviousGuesses))
|
||||
.WithOkColor();
|
||||
|
||||
if (Uri.IsWellFormedUriString(game.Term.ImageUrl, UriKind.Absolute))
|
||||
winEmbed.WithImageUrl(game.Term.ImageUrl);
|
||||
|
||||
return ctx.Channel.EmbedAsync(winEmbed);
|
||||
}
|
||||
|
||||
private Task Hm_OnLetterAlreadyUsed(Hangman game, string user, char guess)
|
||||
{
|
||||
return SendErrorAsync($"Hangman Game ({game.TermType})", $"{user} Letter `{guess}` has already been used. You can guess again in 3 seconds.\n" + game.ScrambledWord + "\n" + game.GetHangman(),
|
||||
footer: string.Join(" ", game.PreviousGuesses));
|
||||
}
|
||||
|
||||
private Task Hm_OnGuessSucceeded(Hangman game, string user, char guess)
|
||||
{
|
||||
return SendConfirmAsync($"Hangman Game ({game.TermType})", $"{user} guessed a letter `{guess}`!\n" + game.ScrambledWord + "\n" + game.GetHangman(),
|
||||
footer: string.Join(" ", game.PreviousGuesses));
|
||||
}
|
||||
|
||||
private Task Hm_OnGuessFailed(Hangman game, string user, char guess)
|
||||
{
|
||||
return SendErrorAsync($"Hangman Game ({game.TermType})", $"{user} Letter `{guess}` does not exist. You can guess again in 3 seconds.\n" + game.ScrambledWord + "\n" + game.GetHangman(),
|
||||
footer: string.Join(" ", game.PreviousGuesses));
|
||||
var eb = GetEmbed(_eb, hangman);
|
||||
eb.WithDescription(GetText(strs.hangman_game_started));
|
||||
await ctx.Channel.EmbedAsync(eb);
|
||||
}
|
||||
|
||||
[NadekoCommand, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
public async Task HangmanStop()
|
||||
{
|
||||
if (_service.HangmanGames.TryRemove(ctx.Channel.Id, out var removed))
|
||||
if (await _service.StopHangman(ctx.Channel.Id))
|
||||
{
|
||||
await removed.Stop().ConfigureAwait(false);
|
||||
await ReplyConfirmLocalizedAsync(strs.hangman_stopped).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
@@ -4,7 +4,6 @@ using NadekoBot.Services;
|
||||
using NadekoBot.Extensions;
|
||||
using NadekoBot.Modules.Games.Common;
|
||||
using NadekoBot.Modules.Games.Common.Acrophobia;
|
||||
using NadekoBot.Modules.Games.Common.Hangman;
|
||||
using NadekoBot.Modules.Games.Common.Nunchi;
|
||||
using NadekoBot.Modules.Games.Common.Trivia;
|
||||
using Newtonsoft.Json;
|
||||
@@ -12,7 +11,6 @@ using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@@ -40,10 +38,6 @@ namespace NadekoBot.Modules.Games.Services
|
||||
|
||||
//channelId, game
|
||||
public ConcurrentDictionary<ulong, AcrophobiaGame> AcrophobiaGames { get; } = new ConcurrentDictionary<ulong, AcrophobiaGame>();
|
||||
|
||||
public ConcurrentDictionary<ulong, Hangman> HangmanGames { get; } = new ConcurrentDictionary<ulong, Hangman>();
|
||||
public TermPool TermPool { get; } = new TermPool();
|
||||
|
||||
public ConcurrentDictionary<ulong, TriviaGame> RunningTrivias { get; } = new ConcurrentDictionary<ulong, TriviaGame>();
|
||||
public Dictionary<ulong, TicTacToe> TicTacToeGames { get; } = new Dictionary<ulong, TicTacToe>();
|
||||
public ConcurrentDictionary<ulong, TypingGame> RunningContests { get; } = new ConcurrentDictionary<ulong, TypingGame>();
|
||||
|
@@ -218,7 +218,7 @@ where ((guildid >> 22) % {_creds.TotalShards}) == {_client.ShardId};")
|
||||
|
||||
var channel = _client.GetChannel(repeater.ChannelId) as ITextChannel;
|
||||
if (channel is null)
|
||||
channel = await _client.Rest.GetChannelAsync(repeater.ChannelId) as ITextChannel;
|
||||
try { channel = await _client.Rest.GetChannelAsync(repeater.ChannelId) as ITextChannel; } catch { }
|
||||
|
||||
if (channel is null)
|
||||
{
|
||||
|
@@ -93,7 +93,7 @@ namespace NadekoBot.Modules.Utility.Services
|
||||
return DateTime.UtcNow + (Repeater.Interval * initialIntervalMultiplier);
|
||||
}
|
||||
|
||||
public override bool Equals(object? obj)
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
return obj is RunningRepeater rr && rr.Repeater.Id == this.Repeater.Id;
|
||||
}
|
||||
|
@@ -123,6 +123,7 @@ namespace NadekoBot.Modules.Xp
|
||||
|
||||
[NadekoCommand, Aliases]
|
||||
[UserPerm(GuildPerm.Administrator)]
|
||||
[BotPerm(GuildPerm.ManageRoles)]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[Priority(2)]
|
||||
public async Task XpRoleReward(int level)
|
||||
@@ -133,6 +134,7 @@ namespace NadekoBot.Modules.Xp
|
||||
|
||||
[NadekoCommand, Aliases]
|
||||
[UserPerm(GuildPerm.Administrator)]
|
||||
[BotPerm(GuildPerm.ManageRoles)]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[Priority(1)]
|
||||
public async Task XpRoleReward(int level, AddRemove action, [Leftover] IRole role)
|
||||
|
@@ -11,11 +11,12 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using NadekoBot.Common.ModuleBehaviors;
|
||||
using Serilog;
|
||||
|
||||
namespace NadekoBot.Services
|
||||
{
|
||||
public sealed class RedisImagesCache : IImageCache
|
||||
public sealed class RedisImagesCache : IImageCache, IReadyExecutor
|
||||
{
|
||||
private readonly ConnectionMultiplexer _con;
|
||||
private readonly IBotCredentials _creds;
|
||||
@@ -73,6 +74,14 @@ namespace NadekoBot.Services
|
||||
Currency,
|
||||
}
|
||||
|
||||
public async Task OnReadyAsync()
|
||||
{
|
||||
if (await AllKeysExist())
|
||||
return;
|
||||
|
||||
await Reload();
|
||||
}
|
||||
|
||||
public RedisImagesCache(ConnectionMultiplexer con, IBotCredentials creds)
|
||||
{
|
||||
_con = con;
|
||||
|
@@ -5,7 +5,6 @@ using System;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
using Discord;
|
||||
using Discord.WebSocket;
|
||||
|
||||
namespace NadekoBot.Services
|
||||
@@ -20,12 +19,13 @@ namespace NadekoBot.Services
|
||||
private readonly string _redisKey;
|
||||
private readonly EndPoint _redisEndpoint;
|
||||
|
||||
public RedisCache(ConnectionMultiplexer redis, IBotCredentials creds, DiscordSocketClient client)
|
||||
public RedisCache(ConnectionMultiplexer redis, IBotCredentials creds,
|
||||
IImageCache imageCache, ILocalDataCache dataCache)
|
||||
{
|
||||
Redis = redis;
|
||||
_redisEndpoint = Redis.GetEndPoints().First();
|
||||
LocalImages = new RedisImagesCache(Redis, creds);
|
||||
LocalData = new RedisLocalDataCache(Redis, creds, client.ShardId);
|
||||
LocalImages = imageCache;
|
||||
LocalData = dataCache;
|
||||
_redisKey = creds.RedisKey();
|
||||
}
|
||||
|
||||
|
@@ -7,6 +7,8 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Discord;
|
||||
using Discord.WebSocket;
|
||||
using Serilog;
|
||||
|
||||
namespace NadekoBot.Services
|
||||
@@ -25,56 +27,33 @@ namespace NadekoBot.Services
|
||||
|
||||
public IReadOnlyDictionary<string, SearchPokemon> Pokemons
|
||||
{
|
||||
get
|
||||
{
|
||||
return Get<Dictionary<string, SearchPokemon>>("pokemon_list");
|
||||
}
|
||||
private set
|
||||
{
|
||||
Set("pokemon_list", value);
|
||||
}
|
||||
get => Get<Dictionary<string, SearchPokemon>>("pokemon_list");
|
||||
private set => Set("pokemon_list", value);
|
||||
}
|
||||
|
||||
public IReadOnlyDictionary<string, SearchPokemonAbility> PokemonAbilities
|
||||
{
|
||||
get
|
||||
{
|
||||
return Get<Dictionary<string, SearchPokemonAbility>>("pokemon_abilities");
|
||||
}
|
||||
private set
|
||||
{
|
||||
Set("pokemon_abilities", value);
|
||||
}
|
||||
get => Get<Dictionary<string, SearchPokemonAbility>>("pokemon_abilities");
|
||||
private set => Set("pokemon_abilities", value);
|
||||
}
|
||||
|
||||
public TriviaQuestion[] TriviaQuestions
|
||||
{
|
||||
get
|
||||
{
|
||||
return Get<TriviaQuestion[]>("trivia_questions");
|
||||
}
|
||||
private set
|
||||
{
|
||||
Set("trivia_questions", value);
|
||||
}
|
||||
get => Get<TriviaQuestion[]>("trivia_questions");
|
||||
private set => Set("trivia_questions", value);
|
||||
}
|
||||
|
||||
public IReadOnlyDictionary<int, string> PokemonMap
|
||||
{
|
||||
get
|
||||
{
|
||||
return Get<Dictionary<int, string>>("pokemon_map");
|
||||
}
|
||||
private set
|
||||
{
|
||||
Set("pokemon_map", value);
|
||||
}
|
||||
get => Get<Dictionary<int, string>>("pokemon_map");
|
||||
private set => Set("pokemon_map", value);
|
||||
}
|
||||
|
||||
public RedisLocalDataCache(ConnectionMultiplexer con, IBotCredentials creds, int shardId)
|
||||
public RedisLocalDataCache(ConnectionMultiplexer con, IBotCredentials creds, DiscordSocketClient client)
|
||||
{
|
||||
_con = con;
|
||||
_creds = creds;
|
||||
var shardId = client.ShardId;
|
||||
|
||||
if (shardId == 0)
|
||||
{
|
||||
|
@@ -19,7 +19,7 @@ namespace NadekoBot.Services
|
||||
private readonly IBotCredentials _creds;
|
||||
private readonly DateTime _started;
|
||||
|
||||
public const string BotVersion = "3.0.4";
|
||||
public const string BotVersion = "3.0.6";
|
||||
public string Author => "Kwoth#2452";
|
||||
public string Library => "Discord.Net";
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
276
src/NadekoBot/data/hangman/animals.yml
Normal file
276
src/NadekoBot/data/hangman/animals.yml
Normal file
@@ -0,0 +1,276 @@
|
||||
- word: Alligator
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Alligator.jpg
|
||||
- word: Alpaca
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Alpaca.jpg
|
||||
- word: Anaconda
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Anaconda.jpg
|
||||
- word: Ant
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Ant.jpg
|
||||
- word: Antelope
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Antelope.jpg
|
||||
- word: Ape
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Ape.jpg
|
||||
- word: Armadillo
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Armadillo.jpg
|
||||
- word: Baboon
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Baboon.jpg
|
||||
- word: Badger
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Badger.jpg
|
||||
- word: Bald Eagle
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Bald Eagle.jpg
|
||||
- word: Barracuda
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Barracuda.jpg
|
||||
- word: Bat
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Bat.jpg
|
||||
- word: Bear
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Bear.jpg
|
||||
- word: Beaver
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Beaver.jpg
|
||||
- word: Bedbug
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Bedbug.jpg
|
||||
- word: Bee
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Bee.jpg
|
||||
- word: Beetle
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Beetle.jpg
|
||||
- word: Bird
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Bird.jpg
|
||||
- word: Bison
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Bison.jpg
|
||||
- word: Puma
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Puma.jpg
|
||||
- word: Black Widow
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Black Widow.jpg
|
||||
- word: Blue Jay
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Blue Jay.jpg
|
||||
- word: Blue Whale
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Blue Whale.jpg
|
||||
- word: Bobcat
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Bobcat.jpg
|
||||
- word: Buffalo
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Buffalo.jpg
|
||||
- word: Butterfly
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Butterfly.jpg
|
||||
- word: Buzzard
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Buzzard.jpg
|
||||
- word: Camel
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Camel.jpg
|
||||
- word: Carp
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Carp.jpg
|
||||
- word: Cat
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Cat.jpg
|
||||
- word: Caterpillar
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Caterpillar.jpg
|
||||
- word: Catfish
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Catfish.jpg
|
||||
- word: Cheetah
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Cheetah.jpg
|
||||
- word: Chicken
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Chicken.jpg
|
||||
- word: Chimpanzee
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Chimpanzee.jpg
|
||||
- word: Chipmunk
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Chipmunk.jpg
|
||||
- word: Cobra
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Cobra.jpg
|
||||
- word: Cod
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Cod.jpg
|
||||
- word: Condor
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Condor.jpg
|
||||
- word: Cougar
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Cougar.jpg
|
||||
- word: Cow
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Cow.jpg
|
||||
- word: Coyote
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Coyote.jpg
|
||||
- word: Crab
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Crab.jpg
|
||||
- word: Crane
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Crane.jpg
|
||||
- word: Cricket
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Cricket.jpg
|
||||
- word: Crocodile
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Crocodile.jpg
|
||||
- word: Crow
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Crow.jpg
|
||||
- word: Cuckoo
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Cuckoo.jpg
|
||||
- word: Deer
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Deer.jpg
|
||||
- word: Dinosaur
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Dinosaur.jpg
|
||||
- word: Dog
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Dog.jpg
|
||||
- word: Dolphin
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Dolphin.jpg
|
||||
- word: Donkey
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Donkey.jpg
|
||||
- word: Dove
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Dove.jpg
|
||||
- word: Dragonfly
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Dragonfly.jpg
|
||||
- word: Duck
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Duck.jpg
|
||||
- word: Eel
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Eel.jpg
|
||||
- word: Elephant
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Elephant.jpg
|
||||
- word: Emu
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Emu.jpg
|
||||
- word: Falcon
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Falcon.jpg
|
||||
- word: Ferret
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Ferret.jpg
|
||||
- word: Finch
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Finch.jpg
|
||||
- word: Fish
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Fish.jpg
|
||||
- word: Flamingo
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Flamingo.jpg
|
||||
- word: Flea
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Flea.jpg
|
||||
- word: Fly
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Fly.jpg
|
||||
- word: Fox
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Fox.jpg
|
||||
- word: Frog
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Frog.jpg
|
||||
- word: Goat
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Goat.jpg
|
||||
- word: Golden Eagle
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Golden Eagle.jpg
|
||||
- word: Goose
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Goose.jpg
|
||||
- word: Gopher
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Gopher.jpg
|
||||
- word: Gorilla
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Gorilla.jpg
|
||||
- word: Grasshopper
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Grasshopper.jpg
|
||||
- word: Hamster
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Hamster.jpg
|
||||
- word: Hare
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Hare.jpg
|
||||
- word: Hawk
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Hawk.jpg
|
||||
- word: Hippopotamus
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Hippopotamus.jpg
|
||||
- word: Horse
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Horse.jpg
|
||||
- word: Hummingbird
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Hummingbird.jpg
|
||||
- word: Husky
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Husky.jpg
|
||||
- word: Iguana
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Iguana.jpg
|
||||
- word: Impala
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Impala.jpg
|
||||
- word: Kangaroo
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Kangaroo.jpg
|
||||
- word: Ladybug
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Ladybug.jpg
|
||||
- word: Leopard
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Leopard.jpg
|
||||
- word: Lion
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Lion.jpg
|
||||
- word: Lizard
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Lizard.jpg
|
||||
- word: Llama
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Llama.jpg
|
||||
- word: Lobster
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Lobster.jpg
|
||||
- word: Mongoose
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Mongoose.jpg
|
||||
- word: Monitor lizard
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Monitor lizard.jpg
|
||||
- word: Monkey
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Monkey.jpg
|
||||
- word: Moose
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Moose.jpg
|
||||
- word: Mosquito
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Mosquito.jpg
|
||||
- word: Moth
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Moth.jpg
|
||||
- word: Mountain goat
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Mountain goat.jpg
|
||||
- word: Mouse
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Mouse.jpg
|
||||
- word: Mule
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Mule.jpg
|
||||
- word: Octopus
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Octopus.jpg
|
||||
- word: Orca
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Orca.jpg
|
||||
- word: Ostrich
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Ostrich.jpg
|
||||
- word: Otter
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Otter.jpg
|
||||
- word: Owl
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Owl.jpg
|
||||
- word: Ox
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Ox.jpg
|
||||
- word: Oyster
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Oyster.jpg
|
||||
- word: Panda
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Panda.jpg
|
||||
- word: Parrot
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Parrot.jpg
|
||||
- word: Peacock
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Peacock.jpg
|
||||
- word: Pelican
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Pelican.jpg
|
||||
- word: Penguin
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Penguin.jpg
|
||||
- word: Perch
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Perch.jpg
|
||||
- word: Pheasant
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Pheasant.jpg
|
||||
- word: Pig
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Pig.jpg
|
||||
- word: Pigeon
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Pigeon.jpg
|
||||
- word: Polar bear
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Polar bear.jpg
|
||||
- word: Porcupine
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Porcupine.jpg
|
||||
- word: Quail
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Quail.jpg
|
||||
- word: Rabbit
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Rabbit.jpg
|
||||
- word: Raccoon
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Raccoon.jpg
|
||||
- word: Rat
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Rat.jpg
|
||||
- word: Rattlesnake
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Rattlesnake.jpg
|
||||
- word: Raven
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Raven.jpg
|
||||
- word: Reindeer
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Reindeer.jpg
|
||||
- word: Rooster
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Rooster.jpg
|
||||
- word: Sea lion
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Sea lion.jpg
|
||||
- word: Seal
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Seal.jpg
|
||||
- word: Sheep
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Sheep.jpg
|
||||
- word: Shrew
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Shrew.jpg
|
||||
- word: Skunk
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Skunk.jpg
|
||||
- word: Snail
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Snail.jpg
|
||||
- word: Snake
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Snake.jpg
|
||||
- word: Spider
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Spider.jpg
|
||||
- word: Tiger
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Tiger.jpg
|
||||
- word: Walrus
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Walrus.jpg
|
||||
- word: Whale
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Whale.jpg
|
||||
- word: Wolf
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Wolf.jpg
|
||||
- word: Zebra
|
||||
imageUrl: https://cdn.nadeko.bot/animals/Zebra
|
766
src/NadekoBot/data/hangman/anime.yml
Normal file
766
src/NadekoBot/data/hangman/anime.yml
Normal file
@@ -0,0 +1,766 @@
|
||||
- word: 'Fullmetal Alchemist: Brotherhood'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Fullmetal_Alchemist_Brotherhood.jpg
|
||||
- word: Steins;Gate
|
||||
imageUrl: https://cdn.nadeko.bot/animu/SteinsGate.jpg
|
||||
- word: Hunter x Hunter (2011)
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hunter_x_Hunter_2011.jpg
|
||||
- word: Ginga Eiyuu Densetsu
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ginga_Eiyuu_Densetsu.jpg
|
||||
- word: 'Fruits Basket: The Final'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Fruits_Basket_The_Final.jpg
|
||||
- word: Koe no Katachi
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Koe_no_Katachi.jpg
|
||||
- word: 'Clannad: After Story'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Clannad_After_Story.jpg
|
||||
- word: Gintama
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Gintama.jpg
|
||||
- word: Kimi no Na wa.
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kimi_no_Na_wa..jpg
|
||||
- word: 'Code Geass: Hangyaku no Lelouch R2'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Code_Geass_Hangyaku_no_Lelouch_R2.jpg
|
||||
- word: 'Haikyuu!!: Karasuno Koukou vs. Shiratorizawa Gakuen Koukou'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Haikyuu_Karasuno_Koukou_vs._Shiratorizawa_Gakuen_Koukou.jpg
|
||||
- word: Mob Psycho 100 II
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mob_Psycho_100_II.jpg
|
||||
- word: 'Kizumonogatari III: Reiketsu-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kizumonogatari_III_Reiketsu-hen.jpg
|
||||
- word: Sen to Chihiro no Kamikakushi
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Sen_to_Chihiro_no_Kamikakushi.jpg
|
||||
- word: Violet Evergarden Movie
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Violet_Evergarden_Movie.jpg
|
||||
- word: 'Monogatari Series: Second Season'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Monogatari_Series_Second_Season.jpg
|
||||
- word: Monster
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Monster.jpg
|
||||
- word: 'Shouwa Genroku Rakugo Shinjuu: Sukeroku Futatabi-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shouwa_Genroku_Rakugo_Shinjuu_Sukeroku_Futatabi-hen.jpg
|
||||
- word: Cowboy Bebop
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Cowboy_Bebop.jpg
|
||||
- word: Jujutsu Kaisen (TV)
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Jujutsu_Kaisen_TV.jpg
|
||||
- word: 'Kimetsu no Yaiba Movie: Mugen Ressha-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kimetsu_no_Yaiba_Movie_Mugen_Ressha-hen.jpg
|
||||
- word: Mushishi Zoku Shou 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mushishi_Zoku_Shou_2nd_Season.jpg
|
||||
- word: Hajime no Ippo
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hajime_no_Ippo.jpg
|
||||
- word: Made in Abyss
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Made_in_Abyss.jpg
|
||||
- word: 'Made in Abyss Movie 3: Fukaki Tamashii no Reimei'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Made_in_Abyss_Movie_3_Fukaki_Tamashii_no_Reimei.jpg
|
||||
- word: Mushishi Zoku Shou
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mushishi_Zoku_Shou.jpg
|
||||
- word: 'Rurouni Kenshin: Meiji Kenkaku Romantan - Tsuioku-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Rurouni_Kenshin_Meiji_Kenkaku_Romantan_-_Tsuioku-hen.jpg
|
||||
- word: Shigatsu wa Kimi no Uso
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shigatsu_wa_Kimi_no_Uso.jpg
|
||||
- word: Vinland Saga
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Vinland_Saga.jpg
|
||||
- word: 'Code Geass: Hangyaku no Lelouch'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Code_Geass_Hangyaku_no_Lelouch.jpg
|
||||
- word: Great Teacher Onizuka
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Great_Teacher_Onizuka.jpg
|
||||
- word: Mononoke Hime
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mononoke_Hime.jpg
|
||||
- word: Mushishi
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mushishi.jpg
|
||||
- word: Haikyuu!! Second Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Haikyuu_Second_Season.jpg
|
||||
- word: 'Kaguya-sama wa Kokurasetai?: Tensai-tachi no Renai Zunousen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kaguya-sama_wa_Kokurasetai_Tensai-tachi_no_Renai_Zunousen.jpg
|
||||
- word: 'Hajime no Ippo: New Challenger'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hajime_no_Ippo_New_Challenger.jpg
|
||||
- word: Howl no Ugoku Shiro
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Howl_no_Ugoku_Shiro.jpg
|
||||
- word: Natsume Yuujinchou Shi
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Natsume_Yuujinchou_Shi.jpg
|
||||
- word: Seishun Buta Yarou wa Yumemiru Shoujo no Yume wo Minai
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Seishun_Buta_Yarou_wa_Yumemiru_Shoujo_no_Yume_wo_Minai.jpg
|
||||
- word: Tengen Toppa Gurren Lagann
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tengen_Toppa_Gurren_Lagann.jpg
|
||||
- word: Violet Evergarden
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Violet_Evergarden.jpg
|
||||
- word: Natsume Yuujinchou Roku
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Natsume_Yuujinchou_Roku.jpg
|
||||
- word: Suzumiya Haruhi no Shoushitsu
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Suzumiya_Haruhi_no_Shoushitsu.jpg
|
||||
- word: Death Note
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Death_Note.jpg
|
||||
- word: Fumetsu no Anata e
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Fumetsu_no_Anata_e.jpg
|
||||
- word: 'Mushishi Zoku Shou: Suzu no Shizuku'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mushishi_Zoku_Shou_Suzu_no_Shizuku.jpg
|
||||
- word: Ookami Kodomo no Ame to Yuki
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ookami_Kodomo_no_Ame_to_Yuki.jpg
|
||||
- word: Ping Pong the Animation
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ping_Pong_the_Animation.jpg
|
||||
- word: Yakusoku no Neverland
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Yakusoku_no_Neverland.jpg
|
||||
- word: 'Kizumonogatari II: Nekketsu-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kizumonogatari_II_Nekketsu-hen.jpg
|
||||
- word: Yojouhan Shinwa Taikei
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Yojouhan_Shinwa_Taikei.jpg
|
||||
- word: Natsume Yuujinchou San
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Natsume_Yuujinchou_San.jpg
|
||||
- word: Shouwa Genroku Rakugo Shinjuu
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shouwa_Genroku_Rakugo_Shinjuu.jpg
|
||||
- word: 'Hajime no Ippo: Rising'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hajime_no_Ippo_Rising.jpg
|
||||
- word: Kimetsu no Yaiba
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kimetsu_no_Yaiba.jpg
|
||||
- word: Kimi no Suizou wo Tabetai
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kimi_no_Suizou_wo_Tabetai.jpg
|
||||
- word: Natsume Yuujinchou Go
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Natsume_Yuujinchou_Go.jpg
|
||||
- word: Re:Zero kara Hajimeru Isekai Seikatsu 2nd Season Part 2
|
||||
imageUrl: https://cdn.nadeko.bot/animu/ReZero_kara_Hajimeru_Isekai_Seikatsu_2nd_Season_Part_2.jpg
|
||||
- word: 'Mushishi: Hihamukage'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mushishi_Hihamukage.jpg
|
||||
- word: Bakuman. 3rd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Bakuman._3rd_Season.jpg
|
||||
- word: 'Kara no Kyoukai 5: Mujun Rasen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kara_no_Kyoukai_5_Mujun_Rasen.jpg
|
||||
- word: Sora yori mo Tooi Basho
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Sora_yori_mo_Tooi_Basho.jpg
|
||||
- word: Zoku Natsume Yuujinchou
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Zoku_Natsume_Yuujinchou.jpg
|
||||
- word: One Piece
|
||||
imageUrl: https://cdn.nadeko.bot/animu/One_Piece.jpg
|
||||
- word: Yuru Camp△ Season 2
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Yuru_Camp_Season_2.jpg
|
||||
- word: Fruits Basket 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Fruits_Basket_2nd_Season.jpg
|
||||
- word: 'Haikyuu!!: To the Top 2nd Season'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Haikyuu_To_the_Top_2nd_Season.jpg
|
||||
- word: 'Koukaku Kidoutai: Stand Alone Complex 2nd GIG'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Koukaku_Kidoutai_Stand_Alone_Complex_2nd_GIG.jpg
|
||||
- word: One Punch Man
|
||||
imageUrl: https://cdn.nadeko.bot/animu/One_Punch_Man.jpg
|
||||
- word: 'Neon Genesis Evangelion: The End of Evangelion'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Neon_Genesis_Evangelion_The_End_of_Evangelion.jpg
|
||||
- word: Ansatsu Kyoushitsu 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ansatsu_Kyoushitsu_2nd_Season.jpg
|
||||
- word: Slam Dunk
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Slam_Dunk.jpg
|
||||
- word: "Vivy: Fluorite Eye's Song"
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Vivy_Fluorite_Eyes_Song.jpg
|
||||
- word: 'Rainbow: Nisha Rokubou no Shichinin'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Rainbow_Nisha_Rokubou_no_Shichinin.jpg
|
||||
- word: Shingeki no Kyojin
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shingeki_no_Kyojin.jpg
|
||||
- word: Uchuu Kyoudai
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Uchuu_Kyoudai.jpg
|
||||
- word: Aria the Origination
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Aria_the_Origination.jpg
|
||||
- word: Holo no Graffiti
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Holo_no_Graffiti.jpg
|
||||
- word: Hotaru no Haka
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hotaru_no_Haka.jpg
|
||||
- word: Banana Fish
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Banana_Fish.jpg
|
||||
- word: Chihayafuru 3
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Chihayafuru_3.jpg
|
||||
- word: Kenpuu Denki Berserk
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kenpuu_Denki_Berserk.jpg
|
||||
- word: Perfect Blue
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Perfect_Blue.jpg
|
||||
- word: Samurai Champloo
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Samurai_Champloo.jpg
|
||||
- word: Haikyuu!!
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Haikyuu.jpg
|
||||
- word: Mo Dao Zu Shi
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mo_Dao_Zu_Shi.jpg
|
||||
- word: Mob Psycho 100
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mob_Psycho_100.jpg
|
||||
- word: Zoku Owarimonogatari
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Zoku_Owarimonogatari.jpg
|
||||
- word: Nana
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Nana.jpg
|
||||
- word: Nichijou
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Nichijou.jpg
|
||||
- word: Saenai Heroine no Sodatekata Fine
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Saenai_Heroine_no_Sodatekata_Fine.jpg
|
||||
- word: 'Mushishi Zoku Shou: Odoro no Michi'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mushishi_Zoku_Shou_Odoro_no_Michi.jpg
|
||||
- word: Owarimonogatari
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Owarimonogatari.jpg
|
||||
- word: Saiki Kusuo no Ψ-nan 2
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Saiki_Kusuo_no_-nan_2.jpg
|
||||
- word: Yuu☆Yuu☆Hakusho
|
||||
imageUrl: https://cdn.nadeko.bot/animu/YuuYuuHakusho.jpg
|
||||
- word: Golden Kamuy 3rd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Golden_Kamuy_3rd_Season.jpg
|
||||
- word: 'Koukaku Kidoutai: Stand Alone Complex'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Koukaku_Kidoutai_Stand_Alone_Complex.jpg
|
||||
- word: Mo Dao Zu Shi 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mo_Dao_Zu_Shi_2nd_Season.jpg
|
||||
- word: Re:Zero kara Hajimeru Isekai Seikatsu 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/ReZero_kara_Hajimeru_Isekai_Seikatsu_2nd_Season.jpg
|
||||
- word: Sayonara no Asa ni Yakusoku no Hana wo Kazarou
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Sayonara_no_Asa_ni_Yakusoku_no_Hana_wo_Kazarou.jpg
|
||||
- word: Mononoke
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mononoke.jpg
|
||||
- word: Saiki Kusuo no Ψ-nan
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Saiki_Kusuo_no_-nan.jpg
|
||||
- word: Gotcha!
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Gotcha.jpg
|
||||
- word: 'Kara no Kyoukai 7: Satsujin Kousatsu (Go)'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kara_no_Kyoukai_7_Satsujin_Kousatsu_Go.jpg
|
||||
- word: Kaze ga Tsuyoku Fuiteiru
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kaze_ga_Tsuyoku_Fuiteiru.jpg
|
||||
- word: 3-gatsu no Lion
|
||||
imageUrl: https://cdn.nadeko.bot/animu/3-gatsu_no_Lion.jpg
|
||||
- word: Cross Game
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Cross_Game.jpg
|
||||
- word: Josee to Tora to Sakana-tachi
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Josee_to_Tora_to_Sakana-tachi.jpg
|
||||
- word: Kono Oto Tomare! 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kono_Oto_Tomare_2nd_Season.jpg
|
||||
- word: 'Natsume Yuujinchou Movie: Utsusemi ni Musubu'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Natsume_Yuujinchou_Movie_Utsusemi_ni_Musubu.jpg
|
||||
- word: Yahari Ore no Seishun Love Comedy wa Machigatteiru. Kan
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Yahari_Ore_no_Seishun_Love_Comedy_wa_Machigatteiru._Kan.jpg
|
||||
- word: Non Non Biyori Nonstop
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Non_Non_Biyori_Nonstop.jpg
|
||||
- word: Usagi Drop
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Usagi_Drop.jpg
|
||||
- word: Baccano!
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Baccano.jpg
|
||||
- word: Chihayafuru 2
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Chihayafuru_2.jpg
|
||||
- word: 'Douluo Dalu: Xiaowu Juebie'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Douluo_Dalu_Xiaowu_Juebie.jpg
|
||||
- word: Grand Blue
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Grand_Blue.jpg
|
||||
- word: Houseki no Kuni (TV)
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Houseki_no_Kuni_TV.jpg
|
||||
- word: Hunter x Hunter
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hunter_x_Hunter.jpg
|
||||
- word: 'Kaguya-sama wa Kokurasetai: Tensai-tachi no Renai Zunousen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kaguya-sama_wa_Kokurasetai_Tensai-tachi_no_Renai_Zunousen.jpg
|
||||
- word: Barakamon
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Barakamon.jpg
|
||||
- word: 'Kizumonogatari I: Tekketsu-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kizumonogatari_I_Tekketsu-hen.jpg
|
||||
- word: 'Mushoku Tensei: Isekai Ittara Honki Dasu'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mushoku_Tensei_Isekai_Ittara_Honki_Dasu.jpg
|
||||
- word: Natsume Yuujinchou Roku Specials
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Natsume_Yuujinchou_Roku_Specials.jpg
|
||||
- word: 'Violet Evergarden Gaiden: Eien to Jidou Shuki Ningyou'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Violet_Evergarden_Gaiden_Eien_to_Jidou_Shuki_Ningyou.jpg
|
||||
- word: Shiguang Daili Ren
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shiguang_Daili_Ren.jpg
|
||||
- word: Tensei shitara Slime Datta Ken 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tensei_shitara_Slime_Datta_Ken_2nd_Season.jpg
|
||||
- word: Ano Hi Mita Hana no Namae wo Bokutachi wa Mada Shiranai.
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ano_Hi_Mita_Hana_no_Namae_wo_Bokutachi_wa_Mada_Shiranai..jpg
|
||||
- word: 'Cowboy Bebop: Tengoku no Tobira'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Cowboy_Bebop_Tengoku_no_Tobira.jpg
|
||||
- word: Hellsing Ultimate
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hellsing_Ultimate.jpg
|
||||
- word: Kaze no Tani no Nausica
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kaze_no_Tani_no_Nausica.jpg
|
||||
- word: Luo Xiao Hei Zhan Ji (Movie)
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Luo_Xiao_Hei_Zhan_Ji_Movie.jpg
|
||||
- word: Bakuman. 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Bakuman._2nd_Season.jpg
|
||||
- word: 'Kiseijuu: Sei no Kakuritsu'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kiseijuu_Sei_no_Kakuritsu.jpg
|
||||
- word: 'Kamisama Hajimemashita: Kako-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kamisama_Hajimemashita_Kako-hen.jpg
|
||||
- word: Kingdom 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kingdom_2nd_Season.jpg
|
||||
- word: Kingdom 3rd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kingdom_3rd_Season.jpg
|
||||
- word: Mahou Shoujo Madoka Magica
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mahou_Shoujo_MadokaMagica.jpg
|
||||
- word: Psycho-Pass
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Psycho-Pass.jpg
|
||||
- word: Tenki no Ko
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tenki_no_Ko.jpg
|
||||
- word: Heaven Official's Blessing
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tian_Guan_Ci_Fu.jpg
|
||||
- word: Uchuu Senkan Yamato 2199
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Uchuu_Senkan_Yamato_2199.jpg
|
||||
- word: 'Haikyuu!!: To the Top'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Haikyuu_To_the_Top.jpg
|
||||
- word: Bakemonogatari
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Bakemonogatari.jpg
|
||||
- word: Given
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Given.jpg
|
||||
- word: Hotarubi no Mori e
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hotarubi_no_Mori_e.jpg
|
||||
- word: Katanagatari
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Katanagatari.jpg
|
||||
- word: 'Natsume Yuujinchou: Itsuka Yuki no Hi ni'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Natsume_Yuujinchou_Itsuka_Yuki_no_Hi_ni.jpg
|
||||
- word: One Outs
|
||||
imageUrl: https://cdn.nadeko.bot/animu/One_Outs.jpg
|
||||
- word: Ookami to Koushinryou II
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ookami_to_Koushinryou_II.jpg
|
||||
- word: Romeo no Aoi Sora
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Romeo_no_Aoi_Sora.jpg
|
||||
- word: Sakamichi no Apollon
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Sakamichi_no_Apollon.jpg
|
||||
- word: Seishun Buta Yarou wa Bunny Girl Senpai no Yume wo Minai
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Seishun_Buta_Yarou_wa_Bunny_Girl_Senpai_no_Yume_wo_Minai.jpg
|
||||
- word: Boku dake ga Inai Machi
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Boku_dake_ga_Inai_Machi.jpg
|
||||
- word: 'Evangelion: 2.0 You Can (Not) Advance'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Evangelion_2.0_You_Can_Not_Advance.jpg
|
||||
- word: Kemono no Souja Erin
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kemono_no_Souja_Erin.jpg
|
||||
- word: 'Made in Abyss Movie 2: Hourou Suru Tasogare'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Made_in_Abyss_Movie_2_Hourou_Suru_Tasogare.jpg
|
||||
- word: 'Major: World Series'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Major_World_Series.jpg
|
||||
- word: Doukyuusei (Movie)
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Doukyuusei_Movie.jpg
|
||||
- word: K-On! Movie
|
||||
imageUrl: https://cdn.nadeko.bot/animu/K-On_Movie.jpg
|
||||
- word: Natsume Yuujinchou
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Natsume_Yuujinchou.jpg
|
||||
- word: Natsume Yuujinchou Go Specials
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Natsume_Yuujinchou_Go_Specials.jpg
|
||||
- word: NHK ni Youkoso!
|
||||
imageUrl: https://cdn.nadeko.bot/animu/NHK_ni_Youkoso.jpg
|
||||
- word: Shelter
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shelter.jpg
|
||||
- word: Shinsekai yori
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shinsekai_yori.jpg
|
||||
- word: Shirobako
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shirobako.jpg
|
||||
- word: Versailles no Bara
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Versailles_no_Bara.jpg
|
||||
- word: Neon Genesis Evangelion
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Neon_Genesis_Evangelion.jpg
|
||||
- word: Dr. Stone
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Dr._Stone.jpg
|
||||
- word: Fate/Zero
|
||||
imageUrl: https://cdn.nadeko.bot/animu/FateZero.jpg
|
||||
- word: Great Pretender
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Great_Pretender.jpg
|
||||
- word: 'Hunter x Hunter: Original Video Animation'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hunter_x_Hunter_Original_Video_Animation.jpg
|
||||
- word: 'Kino no Tabi: The Beautiful World'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kino_no_Tabi_The_Beautiful_World.jpg
|
||||
- word: Kuroko no Basket 3rd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kuroko_no_Basket_3rd_Season.jpg
|
||||
- word: Bakemono no Ko
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Bakemono_no_Ko.jpg
|
||||
- word: Beck
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Beck.jpg
|
||||
- word: 'Diamond no Ace: Second Season'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Diamond_no_Ace_Second_Season.jpg
|
||||
- word: Nodame Cantabile
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Nodame_Cantabile.jpg
|
||||
- word: 'Rurouni Kenshin: Meiji Kenkaku Romantan'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Rurouni_Kenshin_Meiji_Kenkaku_Romantan.jpg
|
||||
- word: 'Tsubasa: Tokyo Revelations'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tsubasa_Tokyo_Revelations.jpg
|
||||
- word: 'Violet Evergarden: Kitto "Ai" wo Shiru Hi ga Kuru no Darou'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Violet_Evergarden_Kitto_Ai_wo_Shiru_Hi_ga_Kuru_no_Darou.jpg
|
||||
- word: Planetes
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Planetes.jpg
|
||||
- word: 'Stranger: Mukou Hadan'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Stranger_Mukou_Hadan.jpg
|
||||
- word: Yuukoku no Moriarty 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Yuukoku_no_Moriarty_2nd_Season.jpg
|
||||
- word: Gin no Saji 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Gin_no_Saji_2nd_Season.jpg
|
||||
- word: Hibike! Euphonium 2
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hibike_Euphonium_2.jpg
|
||||
- word: Initial D First Stage
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Initial_D_First_Stage.jpg
|
||||
- word: Kawaki wo Ameku
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kawaki_wo_Ameku.jpg
|
||||
- word: Koukaku Kidoutai
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Koukaku_Kidoutai.jpg
|
||||
- word: Redline
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Redline.jpg
|
||||
- word: Tenkuu no Shiro Laputa
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tenkuu_no_Shiro_Laputa.jpg
|
||||
- word: Tokyo Godfathers
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tokyo_Godfathers.jpg
|
||||
- word: Tonari no Totoro
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tonari_no_Totoro.jpg
|
||||
- word: 'No Game No Life: Zero'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/No_Game_No_Life_Zero.jpg
|
||||
- word: 'Nomad: Megalo Box 2'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Nomad_Megalo_Box_2.jpg
|
||||
- word: Quanzhi Gaoshou Specials
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Quanzhi_Gaoshou_Specials.jpg
|
||||
- word: Ashita no Joe
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ashita_no_Joe.jpg
|
||||
- word: 'Douluo Dalu: Xingdou Xian Ji Pian'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Douluo_Dalu_Xingdou_Xian_Ji_Pian.jpg
|
||||
- word: 'Gyakkyou Burai Kaiji: Ultimate Survivor'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Gyakkyou_Burai_Kaiji_Ultimate_Survivor.jpg
|
||||
- word: 'Hajime no Ippo: Champion Road'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hajime_no_Ippo_Champion_Road.jpg
|
||||
- word: 'Hunter x Hunter: Greed Island Final'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hunter_x_Hunter_Greed_Island_Final.jpg
|
||||
- word: Re:Zero kara Hajimeru Isekai Seikatsu
|
||||
imageUrl: https://cdn.nadeko.bot/animu/ReZero_kara_Hajimeru_Isekai_Seikatsu.jpg
|
||||
- word: Sennen Joyuu
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Sennen_Joyuu.jpg
|
||||
- word: Stand By Me Doraemon 2
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Stand_By_Me_Doraemon_2.jpg
|
||||
- word: Yuru Camp
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Yuru_Camp.jpg
|
||||
- word: 'Nodame Cantabile: Finale'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Nodame_Cantabile_Finale.jpg
|
||||
- word: Ookami to Koushinryou
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ookami_to_Koushinryou.jpg
|
||||
- word: Space Dandy 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/SpaceDandy_2nd_Season.jpg
|
||||
- word: Youjo Senki Movie
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Youjo_Senki_Movie.jpg
|
||||
- word: Boku no Hero Academia 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Boku_no_Hero_Academia_2nd_Season.jpg
|
||||
- word: Danshi Koukousei no Nichijou
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Danshi_Koukousei_no_Nichijou.jpg
|
||||
- word: Kuroko no Basket 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kuroko_no_Basket_2nd_Season.jpg
|
||||
- word: 'Magi: The Kingdom of Magic'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Magi_The_Kingdom_of_Magic.jpg
|
||||
- word: 'Douluo Dalu: Hanhai Qian Kun'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Douluo_Dalu_Hanhai_Qian_Kun.jpg
|
||||
- word: 'Gyakkyou Burai Kaiji: Hakairoku-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Gyakkyou_Burai_Kaiji_Hakairoku-hen.jpg
|
||||
- word: Hachimitsu to Clover II
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hachimitsu_to_Clover_II.jpg
|
||||
- word: Horimiya
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Horimiya.jpg
|
||||
- word: 'Kuroshitsuji Movie: Book of the Atlantic'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kuroshitsuji_Movie_Book_of_the_Atlantic.jpg
|
||||
- word: 'Non Non Biyori Movie: Vacation'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Non_Non_Biyori_Movie_Vacation.jpg
|
||||
- word: Wu Liuqi Zhi Zui Qiang Fa Xing Shi
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Wu_Liuqi_Zhi_Zui_Qiang_Fa_Xing_Shi.jpg
|
||||
- word: Yahari Ore no Seishun Love Comedy wa Machigatteiru. Zoku
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Yahari_Ore_no_Seishun_Love_Comedy_wa_Machigatteiru._Zoku.jpg
|
||||
- word: Shokugeki no Souma
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shokugeki_no_Souma.jpg
|
||||
- word: SKET Dance
|
||||
imageUrl: https://cdn.nadeko.bot/animu/SKET_Dance.jpg
|
||||
- word: Wu Liuqi Zhi Xuanwu Guo Pian
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Wu_Liuqi_Zhi_Xuanwu_Guo_Pian.jpg
|
||||
- word: xxxHOLiC Kei
|
||||
imageUrl: https://cdn.nadeko.bot/animu/xxxHOLiC_Kei.jpg
|
||||
- word: Initial D Final Stage
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Initial_D_Final_Stage.jpg
|
||||
- word: 'Diamond no Ace: Act II'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Diamond_no_Ace_Act_II.jpg
|
||||
- word: 'Hajime no Ippo: Mashiba vs. Kimura'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hajime_no_Ippo_Mashiba_vs._Kimura.jpg
|
||||
- word: Kono Sekai no Katasumi ni
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kono_Sekai_no_Katasumi_ni.jpg
|
||||
- word: Majo no Takkyuubin
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Majo_no_Takkyuubin.jpg
|
||||
- word: Mimi wo Sumaseba
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mimi_wo_Sumaseba.jpg
|
||||
- word: Trigun
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Trigun.jpg
|
||||
- word: 'ReLIFE: Kanketsu-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/ReLIFE_Kanketsu-hen.jpg
|
||||
- word: Toaru Kagaku no Railgun T
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Toaru_Kagaku_no_Railgun_T.jpg
|
||||
- word: xxxHOLiC Rou
|
||||
imageUrl: https://cdn.nadeko.bot/animu/xxxHOLiC_Rou.jpg
|
||||
- word: Yoru wa Mijikashi Arukeyo Otome
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Yoru_wa_Mijikashi_Arukeyo_Otome.jpg
|
||||
- word: Bakuman.
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Bakuman..jpg
|
||||
- word: 'Cardcaptor Sakura Movie 2: Fuuin Sareta Card'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Cardcaptor_Sakura_Movie_2_Fuuin_Sareta_Card.jpg
|
||||
- word: Chihayafuru
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Chihayafuru.jpg
|
||||
- word: 'Douluo Dalu: Qian Hua Xi Jin'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Douluo_Dalu_Qian_Hua_Xi_Jin.jpg
|
||||
- word: 'Ginga Eiyuu Densetsu: Die Neue These - Seiran 3'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ginga_Eiyuu_Densetsu_Die_Neue_These_-_Seiran_3.jpg
|
||||
- word: Kaguya-hime no Monogatari
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kaguya-hime_no_Monogatari.jpg
|
||||
- word: 'Little Busters!: Refrain'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Little_Busters_Refrain.jpg
|
||||
- word: Dororo
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Dororo.jpg
|
||||
- word: 'Dr. Stone: Stone Wars'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Dr._Stone_Stone_Wars.jpg
|
||||
- word: 'Fate/stay night: Unlimited Blade Works'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Fatestay_night_Unlimited_Blade_Works.jpg
|
||||
- word: Girls & Panzer Movie
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Girls__Panzer_Movie.jpg
|
||||
- word: Golden Kamuy 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Golden_Kamuy_2nd_Season.jpg
|
||||
- word: Higurashi no Naku Koro ni Kai
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Higurashi_no_Naku_Koro_ni_Kai.jpg
|
||||
- word: 'InuYasha: Kanketsu-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/InuYasha_Kanketsu-hen.jpg
|
||||
- word: 'Saiki Kusuo no Ψ-nan: Kanketsu-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Saiki_Kusuo_no_-nan_Kanketsu-hen.jpg
|
||||
- word: 'One Piece Movie 14: Stampede'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/One_Piece_Movie_14_Stampede.jpg
|
||||
- word: 'One Piece: Episode of Merry - Mou Hitori no Nakama no Monogatari'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/One_Piece_Episode_of_Merry_-_Mou_Hitori_no_Nakama_no_Monogatari.jpg
|
||||
- word: Shoujo Kakumei Utena
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shoujo_Kakumei_Utena.jpg
|
||||
- word: Ballroom e Youkoso
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ballroom_e_Youkoso.jpg
|
||||
- word: 'Berserk: Ougon Jidai-hen III - Kourin'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Berserk_Ougon_Jidai-hen_III_-_Kourin.jpg
|
||||
- word: Bungou Stray Dogs 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Bungou_Stray_Dogs_2nd_Season.jpg
|
||||
- word: 'Douluo Dalu: Haishen Zhi Guang'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Douluo_Dalu_Haishen_Zhi_Guang.jpg
|
||||
- word: Fruits Basket 1st Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Fruits_Basket_1st_Season.jpg
|
||||
- word: 'Hunter x Hunter: Greed Island'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hunter_x_Hunter_Greed_Island.jpg
|
||||
- word: Liz to Aoi Tori
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Liz_to_Aoi_Tori.jpg
|
||||
- word: Aria the Natural
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Aria_the_Natural.jpg
|
||||
- word: Asobi Asobase
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Asobi_Asobase.jpg
|
||||
- word: 'Black Lagoon: The Second Barrage'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Black_Lagoon_The_Second_Barrage.jpg
|
||||
- word: Bungou Stray Dogs 3rd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Bungou_Stray_Dogs_3rd_Season.jpg
|
||||
- word: Death Parade
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Death_Parade.jpg
|
||||
- word: 'Digimon Adventure: Last Evolution Kizuna'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Digimon_Adventure_Last_Evolution_Kizuna.jpg
|
||||
- word: Hinamatsuri (TV)
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hinamatsuri_TV.jpg
|
||||
- word: "Kyoukai no Kanata Movie 2: I'll Be Here - Mirai-hen"
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kyoukai_no_Kanata_Movie_2_Ill_Be_Here_-_Mirai-hen.jpg
|
||||
- word: Maison Ikkoku
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Maison_Ikkoku.jpg
|
||||
- word: 'Naruto: Shippuuden'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Naruto_Shippuuden.jpg
|
||||
- word: Non Non Biyori Repeat
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Non_Non_Biyori_Repeat.jpg
|
||||
- word: Noragami Aragoto
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Noragami_Aragoto.jpg
|
||||
- word: Ouran Koukou Host Club
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ouran_Koukou_Host_Club.jpg
|
||||
- word: Senki Zesshou Symphogear XV
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Senki_Zesshou_Symphogear_XV.jpg
|
||||
- word: Shoujo Shuumatsu Ryokou
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shoujo_Shuumatsu_Ryokou.jpg
|
||||
- word: Toradora!
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Toradora.jpg
|
||||
- word: 'Working!!!: Lord of the Takanashi'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Working_Lord_of_the_Takanashi.jpg
|
||||
- word: Boku no Hero Academia 3rd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Boku_no_Hero_Academia_3rd_Season.jpg
|
||||
- word: 'Douluo Dalu: Jingying Sai'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Douluo_Dalu_Jingying_Sai.jpg
|
||||
- word: 5-toubun no Hanayome ∬
|
||||
imageUrl: https://cdn.nadeko.bot/animu/5-toubun_no_Hanayome_.jpg
|
||||
- word: Akira
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Akira.jpg
|
||||
- word: Gankutsuou
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Gankutsuou.jpg
|
||||
- word: Kamisama Hajimemashita◎
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kamisama_Hajimemashita.jpg
|
||||
- word: 'Lupin III: Part 5'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Lupin_III_Part_5.jpg
|
||||
- word: Mo Dao Zu Shi Q
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mo_Dao_Zu_Shi_Q.jpg
|
||||
- word: Nisemonogatari
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Nisemonogatari.jpg
|
||||
- word: 'One Piece Film: Z'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/One_Piece_Film_Z.jpg
|
||||
- word: Quanzhi Gaoshou Zhi Dianfeng Rongyao
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Quanzhi_Gaoshou_Zhi_Dianfeng_Rongyao.jpg
|
||||
- word: Toki wo Kakeru Shoujo
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Toki_wo_Kakeru_Shoujo.jpg
|
||||
- word: No Game No Life
|
||||
imageUrl: https://cdn.nadeko.bot/animu/No_Game_No_Life.jpg
|
||||
- word: 'Nodame Cantabile: Paris-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Nodame_Cantabile_Paris-hen.jpg
|
||||
- word: Sakura-sou no Pet na Kanojo
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Sakura-sou_no_Pet_na_Kanojo.jpg
|
||||
- word: Seirei no Moribito
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Seirei_no_Moribito.jpg
|
||||
- word: 'Shokugeki no Souma: Ni no Sara'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shokugeki_no_Souma_Ni_no_Sara.jpg
|
||||
- word: Cardcaptor Sakura
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Cardcaptor_Sakura.jpg
|
||||
- word: Detective Conan
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Detective_Conan.jpg
|
||||
- word: Durarara!!
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Durarara.jpg
|
||||
- word: Eizouken ni wa Te wo Dasu na!
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Eizouken_ni_wa_Te_wo_Dasu_na.jpg
|
||||
- word: Fate/Grand Carnival
|
||||
imageUrl: https://cdn.nadeko.bot/animu/FateGrand_Carnival.jpg
|
||||
- word: Kaiba
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kaiba.jpg
|
||||
- word: Katekyo Hitman Reborn!
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Katekyo_Hitman_Reborn.jpg
|
||||
- word: "Mahou Shoujo Lyrical Nanoha: The Movie 2nd A's"
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mahou_Shoujo_Lyrical_Nanoha_The_Movie_2nd_As.jpg
|
||||
- word: Dragon Ball Z
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Dragon_Ball_Z.jpg
|
||||
- word: Fullmetal Alchemist
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Fullmetal_Alchemist.jpg
|
||||
- word: Ginga Eiyuu Densetsu Gaiden
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ginga_Eiyuu_Densetsu_Gaiden.jpg
|
||||
- word: Given Movie
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Given_Movie.jpg
|
||||
- word: K-On!!
|
||||
imageUrl: https://cdn.nadeko.bot/animu/K-On.jpg
|
||||
- word: 'Lupin III: Cagliostro no Shiro'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Lupin_III_Cagliostro_no_Shiro.jpg
|
||||
- word: 'One Piece Film: Strong World'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/One_Piece_Film_Strong_World.jpg
|
||||
- word: Tanoshii Muumin Ikka
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tanoshii_Muumin_Ikka.jpg
|
||||
- word: 'One Piece: Episode of Nami - Koukaishi no Namida to Nakama no Kizuna'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/One_Piece_Episode_of_Nami_-_Koukaishi_no_Namida_to_Nakama_no_Kizuna.jpg
|
||||
- word: Princess Tutu
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Princess_Tutu.jpg
|
||||
- word: Tokyo Revengers
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tokyo_Revengers.jpg
|
||||
- word: Tsuki ga Kirei
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tsuki_ga_Kirei.jpg
|
||||
- word: 'Chuunibyou demo Koi ga Shitai! Movie: Take On Me'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Chuunibyou_demo_Koi_ga_Shitai_Movie_Take_On_Me.jpg
|
||||
- word: 'Douluo Dalu: Hao Tian Yang Wei'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Douluo_Dalu_Hao_Tian_Yang_Wei.jpg
|
||||
- word: 'Honzuki no Gekokujou: Shisho ni Naru Tame ni wa Shudan wo Erandeiraremasen 2nd Season'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Honzuki_no_Gekokujou_Shisho_ni_Naru_Tame_ni_wa_Shudan_wo_Erandeiraremasen_2nd_Season.jpg
|
||||
- word: Initial D Fourth Stage
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Initial_D_Fourth_Stage.jpg
|
||||
- word: 'Interstella5555: The 5tory of The 5ecret 5tar 5ystem'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Interstella5555_The_5tory_of_The_5ecret_5tar_5ystem.jpg
|
||||
- word: Kono Subarashii Sekai ni Shukufuku wo!
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kono_Subarashii_Sekai_ni_Shukufuku_wo.jpg
|
||||
- word: 'Made in Abyss Movie 1: Tabidachi no Yoake'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Made_in_Abyss_Movie_1_Tabidachi_no_Yoake.jpg
|
||||
- word: Baccano! Specials
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Baccano_Specials.jpg
|
||||
- word: Detroit Metal City
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Detroit_Metal_City.jpg
|
||||
- word: Hyouka
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hyouka.jpg
|
||||
- word: Kanata no Astra
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kanata_no_Astra.jpg
|
||||
- word: 'Koukaku Kidoutai: Stand Alone Complex - Solid State Society'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Koukaku_Kidoutai_Stand_Alone_Complex_-_Solid_State_Society.jpg
|
||||
- word: Kuragehime
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kuragehime.jpg
|
||||
- word: 'Mahoutsukai no Yome: Hoshi Matsu Hito'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mahoutsukai_no_Yome_Hoshi_Matsu_Hito.jpg
|
||||
- word: Mobile Suit Gundam 00
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mobile_Suit_Gundam_00.jpg
|
||||
- word: Tsukimonogatari
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tsukimonogatari.jpg
|
||||
- word: Uchouten Kazoku 2
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Uchouten_Kazoku_2.jpg
|
||||
- word: Pui Pui Molcar
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Pui_Pui_Molcar.jpg
|
||||
- word: 'Saiki Kusuo no Ψ-nan: Ψ-shidou-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Saiki_Kusuo_no_-nan_-shidou-hen.jpg
|
||||
- word: 'Tsubasa: Shunraiki'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tsubasa_Shunraiki.jpg
|
||||
- word: Zankyou no Terror
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Zankyou_no_Terror.jpg
|
||||
- word: Angel Beats!
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Angel_Beats.jpg
|
||||
- word: 'Ginga Eiyuu Densetsu: Arata Naru Tatakai no Overture'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ginga_Eiyuu_Densetsu_Arata_Naru_Tatakai_no_Overture.jpg
|
||||
- word: 'IDOLiSH7: Second Beat!'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/IDOLiSH7_Second_Beat.jpg
|
||||
- word: Initial D Second Stage
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Initial_D_Second_Stage.jpg
|
||||
- word: Kuroko no Basket
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kuroko_no_Basket.jpg
|
||||
- word: Ansatsu Kyoushitsu
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ansatsu_Kyoushitsu.jpg
|
||||
- word: Diamond no Ace
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Diamond_no_Ace.jpg
|
||||
- word: 'Dragon Ball Super: Broly'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Dragon_Ball_Super_Broly.jpg
|
||||
- word: 'Haikyuu!! Movie 4: Concept no Tatakai'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Haikyuu_Movie_4_Concept_no_Tatakai.jpg
|
||||
- word: Karakai Jouzu no Takagi-san 2
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Karakai_Jouzu_no_Takagi-san_2.jpg
|
||||
- word: Kaze Tachinu
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kaze_Tachinu.jpg
|
||||
- word: Skip Beat!
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Skip_Beat.jpg
|
||||
- word: 'Saint Seiya: The Lost Canvas - Meiou Shinwa 2'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Saint_Seiya_The_Lost_Canvas_-_Meiou_Shinwa_2.jpg
|
||||
- word: 'Tamayura: Sotsugyou Shashin Part 4 - Ashita'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tamayura_Sotsugyou_Shashin_Part_4_-_Ashita.jpg
|
||||
- word: Wonder Egg Priority
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Wonder_Egg_Priority.jpg
|
||||
- word: World Trigger 2nd Season
|
||||
imageUrl: https://cdn.nadeko.bot/animu/World_Trigger_2nd_Season.jpg
|
||||
- word: 'Yowamushi Pedal: Grande Road'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Yowamushi_Pedal_Grande_Road.jpg
|
||||
- word: 'Darker than Black: Kuro no Keiyakusha'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Darker_than_Black_Kuro_no_Keiyakusha.jpg
|
||||
- word: 'Evangelion: 3.0+1.0 Thrice Upon a Time'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Evangelion_3.01.0_Thrice_Upon_a_Time.jpg
|
||||
- word: Gin no Saji
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Gin_no_Saji.jpg
|
||||
- word: 'Hajime no Ippo: Boxer no Kobushi'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hajime_no_Ippo_Boxer_no_Kobushi.jpg
|
||||
- word: Hikaru no Go
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hikaru_no_Go.jpg
|
||||
- word: 'JoJo no Kimyou na Bouken Part 3: Stardust Crusaders'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/JoJo_no_Kimyou_na_Bouken_Part_3_Stardust_Crusaders.jpg
|
||||
- word: 'Kamisama Hajimemashita: Kamisama, Shiawase ni Naru'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kamisama_Hajimemashita_Kamisama_Shiawase_ni_Naru.jpg
|
||||
- word: 'Kuroko no Basket: Saikou no Present Desu'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kuroko_no_Basket_Saikou_no_Present_Desu.jpg
|
||||
- word: 'Kuroshitsuji: Book of Circus'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kuroshitsuji_Book_of_Circus.jpg
|
||||
- word: Akatsuki no Yona OVA
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Akatsuki_no_Yona_OVA.jpg
|
||||
- word: Dorohedoro
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Dorohedoro.jpg
|
||||
- word: Durarara!!x2 Ketsu
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Durararax2_Ketsu.jpg
|
||||
- word: 'Ginga Eiyuu Densetsu: Die Neue These - Seiran 2'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ginga_Eiyuu_Densetsu_Die_Neue_These_-_Seiran_2.jpg
|
||||
- word: Gosick
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Gosick.jpg
|
||||
- word: 'Hidamari Sketch: Sae Hiro Sotsugyou-hen'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Hidamari_Sketch_Sae_Hiro_Sotsugyou-hen.jpg
|
||||
- word: 'Koukaku Kidoutai: Stand Alone Complex - The Laughing Man'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Koukaku_Kidoutai_Stand_Alone_Complex_-_The_Laughing_Man.jpg
|
||||
- word: 'Kuroshitsuji: Book of Murder'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kuroshitsuji_Book_of_Murder.jpg
|
||||
- word: Mirai Shounen Conan
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Mirai_Shounen_Conan.jpg
|
||||
- word: Omoide no Marnie
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Omoide_no_Marnie.jpg
|
||||
- word: Shijou Saikyou no Deshi Kenichi
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shijou_Saikyou_no_Deshi_Kenichi.jpg
|
||||
- word: 'Shokugeki no Souma: San no Sara'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Shokugeki_no_Souma_San_no_Sara.jpg
|
||||
- word: Tensei shitara Slime Datta Ken
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Tensei_shitara_Slime_Datta_Ken.jpg
|
||||
- word: 'Ramayana: The Legend of Prince Rama'
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ramayana_The_Legend_of_Prince_Rama.jpg
|
||||
- word: Summer Wars
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Summer_Wars.jpg
|
||||
- word: Yuusha-Ou GaoGaiGar Final
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Yuusha-Ou_GaoGaiGar_Final.jpg
|
||||
- word: Dennou Coil
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Dennou_Coil.jpg
|
||||
- word: Ginga Eiyuu Densetsu Gaiden (1999)
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Ginga_Eiyuu_Densetsu_Gaiden_1999.jpg
|
||||
- word: Glass no Kamen (2005)
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Glass_no_Kamen_2005.jpg
|
||||
- word: Kill la Kill
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Kill_la_Kill.jpg
|
||||
- word: Koukyoushihen Eureka Seven
|
||||
imageUrl: https://cdn.nadeko.bot/animu/Koukyoushihen_Eureka_Seven.jpg
|
390
src/NadekoBot/data/hangman/countries.yml
Normal file
390
src/NadekoBot/data/hangman/countries.yml
Normal file
@@ -0,0 +1,390 @@
|
||||
- word: Afghanistan
|
||||
imageUrl: https://cdn.nadeko.bot/flags/af-flag.gif
|
||||
- word: Albania
|
||||
imageUrl: https://cdn.nadeko.bot/flags/al-flag.gif
|
||||
- word: Algeria
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ag-flag.gif
|
||||
- word: Andorra
|
||||
imageUrl: https://cdn.nadeko.bot/flags/an-flag.gif
|
||||
- word: Angola
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ao-flag.gif
|
||||
- word: Antigua and Barbuda
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ac-flag.gif
|
||||
- word: Argentina
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ar-flag.gif
|
||||
- word: Armenia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/am-flag.gif
|
||||
- word: Australia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/as-flag.gif
|
||||
- word: Austria
|
||||
imageUrl: https://cdn.nadeko.bot/flags/au-flag.gif
|
||||
- word: Azerbaijan
|
||||
imageUrl: https://cdn.nadeko.bot/flags/aj-flag.gif
|
||||
- word: Bahamas
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bf-flag.gif
|
||||
- word: Bahrain
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ba-flag.gif
|
||||
- word: Bangladesh
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bg-flag.gif
|
||||
- word: Barbados
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bb-flag.gif
|
||||
- word: Belarus
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bo-flag.gif
|
||||
- word: Belgium
|
||||
imageUrl: https://cdn.nadeko.bot/flags/be-flag.gif
|
||||
- word: Belize
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bh-flag.gif
|
||||
- word: Benin
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bn-flag.gif
|
||||
- word: Bhutan
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bt-flag.gif
|
||||
- word: Bolivia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bl-flag.gif
|
||||
- word: Bosnia and Herzegovina
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bk-flag.gif
|
||||
- word: Botswana
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bc-flag.gif
|
||||
- word: Brazil
|
||||
imageUrl: https://cdn.nadeko.bot/flags/br-flag.gif
|
||||
- word: Brunei
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bx-flag.gif
|
||||
- word: Bulgaria
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bu-flag.gif
|
||||
- word: Burkina Faso
|
||||
imageUrl: https://cdn.nadeko.bot/flags/uv-flag.gif
|
||||
- word: Burundi
|
||||
imageUrl: https://cdn.nadeko.bot/flags/by-flag.gif
|
||||
- word: Ivory Coast
|
||||
imageUrl: https://cdn.nadeko.bot/flags/iv-flag.gif
|
||||
- word: Cabo Verde
|
||||
imageUrl: https://cdn.nadeko.bot/flags/cv-flag.gif
|
||||
- word: Cambodia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/cb-flag.gif
|
||||
- word: Cameroon
|
||||
imageUrl: https://cdn.nadeko.bot/flags/cm-flag.gif
|
||||
- word: Canada
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ca-flag.gif
|
||||
- word: Central African Republic
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ct-flag.gif
|
||||
- word: Chad
|
||||
imageUrl: https://cdn.nadeko.bot/flags/cd-flag.gif
|
||||
- word: Chile
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ci-flag.gif
|
||||
- word: China
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ch-flag.gif
|
||||
- word: Colombia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/co-flag.gif
|
||||
- word: Comoros
|
||||
imageUrl: https://cdn.nadeko.bot/flags/cn-flag.gif
|
||||
- word: Congo
|
||||
imageUrl: https://cdn.nadeko.bot/flags/cg-flag.gif
|
||||
- word: Costa Rica
|
||||
imageUrl: https://cdn.nadeko.bot/flags/cs-flag.gif
|
||||
- word: Croatia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/hr-flag.gif
|
||||
- word: Cuba
|
||||
imageUrl: https://cdn.nadeko.bot/flags/cu-flag.gif
|
||||
- word: Cyprus
|
||||
imageUrl: https://cdn.nadeko.bot/flags/cy-flag.gif
|
||||
- word: Czechia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ez-flag.gif
|
||||
- word: Denmark
|
||||
imageUrl: https://cdn.nadeko.bot/flags/da-flag.gif
|
||||
- word: Djibouti
|
||||
imageUrl: https://cdn.nadeko.bot/flags/dj-flag.gif
|
||||
- word: Dominica
|
||||
imageUrl: https://cdn.nadeko.bot/flags/do-flag.gif
|
||||
- word: Dominican Republic
|
||||
imageUrl: https://cdn.nadeko.bot/flags/dr-flag.gif
|
||||
- word: Democratic People's Republic of Korea
|
||||
imageUrl: https://cdn.nadeko.bot/flags/kn-flag.gif
|
||||
- word: Democratic Republic of the Congo
|
||||
imageUrl: https://cdn.nadeko.bot/flags/congo-flag.gif
|
||||
- word: Ecuador
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ec-flag.gif
|
||||
- word: Egypt
|
||||
imageUrl: https://cdn.nadeko.bot/flags/eg-flag.gif
|
||||
- word: El Salvador
|
||||
imageUrl: https://cdn.nadeko.bot/flags/es-flag.gif
|
||||
- word: Equatorial Guinea
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ek-flag.gif
|
||||
- word: Eritrea
|
||||
imageUrl: https://cdn.nadeko.bot/flags/er-flag.gif
|
||||
- word: Estonia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/en-flag.gif
|
||||
- word: Eswatini
|
||||
imageUrl: https://cdn.nadeko.bot/flags/wz-flag.gif
|
||||
- word: Ethiopia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/et-flag.gif
|
||||
- word: Fiji
|
||||
imageUrl: https://cdn.nadeko.bot/flags/fj-flag.gif
|
||||
- word: Finland
|
||||
imageUrl: https://cdn.nadeko.bot/flags/fi-flag.gif
|
||||
- word: France
|
||||
imageUrl: https://cdn.nadeko.bot/flags/fr-flag.gif
|
||||
- word: Gabon
|
||||
imageUrl: https://cdn.nadeko.bot/flags/gb-flag.gif
|
||||
- word: Gambia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ga-flag.gif
|
||||
- word: Georgia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/gg-flag.gif
|
||||
- word: Germany
|
||||
imageUrl: https://cdn.nadeko.bot/flags/gm-flag.gif
|
||||
- word: Ghana
|
||||
imageUrl: https://cdn.nadeko.bot/flags/gh-flag.gif
|
||||
- word: Greece
|
||||
imageUrl: https://cdn.nadeko.bot/flags/gr-flag.gif
|
||||
- word: Grenada
|
||||
imageUrl: https://cdn.nadeko.bot/flags/gj-flag.gif
|
||||
- word: Guatemala
|
||||
imageUrl: https://cdn.nadeko.bot/flags/gt-flag.gif
|
||||
- word: Guinea
|
||||
imageUrl: https://cdn.nadeko.bot/flags/gv-flag.gif
|
||||
- word: Guinea-Bissau
|
||||
imageUrl: https://cdn.nadeko.bot/flags/pu-flag.gif
|
||||
- word: Guyana
|
||||
imageUrl: https://cdn.nadeko.bot/flags/gy-flag.gif
|
||||
- word: Haiti
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ha-flag.gif
|
||||
- word: Holy See
|
||||
imageUrl: https://cdn.nadeko.bot/flags/vt-flag.gif
|
||||
- word: Honduras
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ho-flag.gif
|
||||
- word: Hungary
|
||||
imageUrl: https://cdn.nadeko.bot/flags/hu-flag.gif
|
||||
- word: Iceland
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ic-flag.gif
|
||||
- word: India
|
||||
imageUrl: https://cdn.nadeko.bot/flags/in-flag.gif
|
||||
- word: Indonesia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/id-flag.gif
|
||||
- word: Iran
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ir-flag.gif
|
||||
- word: Iraq
|
||||
imageUrl: https://cdn.nadeko.bot/flags/iz-flag.gif
|
||||
- word: Ireland
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ei-flag.gif
|
||||
- word: Israel
|
||||
imageUrl: https://cdn.nadeko.bot/flags/is-flag.gif
|
||||
- word: Italy
|
||||
imageUrl: https://cdn.nadeko.bot/flags/it-flag.gif
|
||||
- word: Jamaica
|
||||
imageUrl: https://cdn.nadeko.bot/flags/jm-flag.gif
|
||||
- word: Japan
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ja-flag.gif
|
||||
- word: Jordan
|
||||
imageUrl: https://cdn.nadeko.bot/flags/jo-flag.gif
|
||||
- word: Kazakhstan
|
||||
imageUrl: https://cdn.nadeko.bot/flags/kz-flag.gif
|
||||
- word: Kenya
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ke-flag.gif
|
||||
- word: Kiribati
|
||||
imageUrl: https://cdn.nadeko.bot/flags/kr-flag.gif
|
||||
- word: Kuwait
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ku-flag.gif
|
||||
- word: Kyrgyzstan
|
||||
imageUrl: https://cdn.nadeko.bot/flags/kg-flag.gif
|
||||
- word: Laos
|
||||
imageUrl: https://cdn.nadeko.bot/flags/la-flag.gif
|
||||
- word: Latvia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/lg-flag.gif
|
||||
- word: Lebanon
|
||||
imageUrl: https://cdn.nadeko.bot/flags/le-flag.gif
|
||||
- word: Lesotho
|
||||
imageUrl: https://cdn.nadeko.bot/flags/lt-flag.gif
|
||||
- word: Liberia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/li-flag.gif
|
||||
- word: Libya
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ly-flag.gif
|
||||
- word: Liechtenstein
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ls-flag.gif
|
||||
- word: Lithuania
|
||||
imageUrl: https://cdn.nadeko.bot/flags/lh-flag.gif
|
||||
- word: Luxembourg
|
||||
imageUrl: https://cdn.nadeko.bot/flags/lu-flag.gif
|
||||
- word: Madagascar
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ma-flag.gif
|
||||
- word: Malawi
|
||||
imageUrl: https://cdn.nadeko.bot/flags/mi-flag.gif
|
||||
- word: Malaysia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/my-flag.gif
|
||||
- word: Maldives
|
||||
imageUrl: https://cdn.nadeko.bot/flags/mv-flag.gif
|
||||
- word: Mali
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ml-flag.gif
|
||||
- word: Malta
|
||||
imageUrl: https://cdn.nadeko.bot/flags/mt-flag.gif
|
||||
- word: Marshall Islands
|
||||
imageUrl: https://cdn.nadeko.bot/flags/rm-flag.gif
|
||||
- word: Mauritania
|
||||
imageUrl: https://cdn.nadeko.bot/flags/mr-flag.gif
|
||||
- word: Mauritius
|
||||
imageUrl: https://cdn.nadeko.bot/flags/mp-flag.gif
|
||||
- word: Mexico
|
||||
imageUrl: https://cdn.nadeko.bot/flags/mx-flag.gif
|
||||
- word: Micronesia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/fm-flag.gif
|
||||
- word: Moldova
|
||||
imageUrl: https://cdn.nadeko.bot/flags/md-flag.gif
|
||||
- word: Monaco
|
||||
imageUrl: https://cdn.nadeko.bot/flags/mn-flag.gif
|
||||
- word: Mongolia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/mg-flag.gif
|
||||
- word: Montenegro
|
||||
imageUrl: https://cdn.nadeko.bot/flags/mj-flag.gif
|
||||
- word: Morocco
|
||||
imageUrl: https://cdn.nadeko.bot/flags/mo-flag.gif
|
||||
- word: Mozambique
|
||||
imageUrl: https://cdn.nadeko.bot/flags/mz-flag.gif
|
||||
- word: Myanmar
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bm-flag.gif
|
||||
- word: Namibia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/wa-flag.gif
|
||||
- word: Nauru
|
||||
imageUrl: https://cdn.nadeko.bot/flags/nr-flag.gif
|
||||
- word: Nepal
|
||||
imageUrl: https://cdn.nadeko.bot/flags/np-flag.gif
|
||||
- word: Netherlands
|
||||
imageUrl: https://cdn.nadeko.bot/flags/nl-flag.gif
|
||||
- word: New Zealand
|
||||
imageUrl: https://cdn.nadeko.bot/flags/nz-flag.gif
|
||||
- word: Nicaragua
|
||||
imageUrl: https://cdn.nadeko.bot/flags/nu-flag.gif
|
||||
- word: Niger
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ng-flag.gif
|
||||
- word: Nigeria
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ni-flag.gif
|
||||
- word: North Macedonia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/mk-flag.gif
|
||||
- word: Norway
|
||||
imageUrl: https://cdn.nadeko.bot/flags/no-flag.gif
|
||||
- word: Oman
|
||||
imageUrl: https://cdn.nadeko.bot/flags/mu-flag.gif
|
||||
- word: Pakistan
|
||||
imageUrl: https://cdn.nadeko.bot/flags/pk-flag.gif
|
||||
- word: Palau
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ps-flag.gif
|
||||
- word: Panama
|
||||
imageUrl: https://cdn.nadeko.bot/flags/pm-flag.gif
|
||||
- word: Papua New Guinea
|
||||
imageUrl: https://cdn.nadeko.bot/flags/pp-flag.gif
|
||||
- word: Paraguay
|
||||
imageUrl: https://cdn.nadeko.bot/flags/pa-flag.gif
|
||||
- word: Peru
|
||||
imageUrl: https://cdn.nadeko.bot/flags/pe-flag.gif
|
||||
- word: Philippines
|
||||
imageUrl: https://cdn.nadeko.bot/flags/rp-flag.gif
|
||||
- word: Poland
|
||||
imageUrl: https://cdn.nadeko.bot/flags/pl-flag.gif
|
||||
- word: Portugal
|
||||
imageUrl: https://cdn.nadeko.bot/flags/po-flag.gif
|
||||
- word: Qatar
|
||||
imageUrl: https://cdn.nadeko.bot/flags/qa-flag.gif
|
||||
- word: Romania
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ro-flag.gif
|
||||
- word: Russia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/rs-flag.gif
|
||||
- word: Rwanda
|
||||
imageUrl: https://cdn.nadeko.bot/flags/rw-flag.gif
|
||||
- word: Saint Kitts and Nevis
|
||||
imageUrl: https://cdn.nadeko.bot/flags/sc-flag.gif
|
||||
- word: Saint Lucia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/st-flag.gif
|
||||
- word: Samoa
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ws-flag.gif
|
||||
- word: San Marino
|
||||
imageUrl: https://cdn.nadeko.bot/flags/sm-flag.gif
|
||||
- word: Sao Tome and Principe
|
||||
imageUrl: https://cdn.nadeko.bot/flags/tp-flag.gif
|
||||
- word: Saudi Arabia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/sa-flag.gif
|
||||
- word: Senegal
|
||||
imageUrl: https://cdn.nadeko.bot/flags/sg-flag.gif
|
||||
- word: Serbia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ri-flag.gif
|
||||
- word: Seychelles
|
||||
imageUrl: https://cdn.nadeko.bot/flags/se-flag.gif
|
||||
- word: Sierra Leone
|
||||
imageUrl: https://cdn.nadeko.bot/flags/sl-flag.gif
|
||||
- word: Singapore
|
||||
imageUrl: https://cdn.nadeko.bot/flags/sn-flag.gif
|
||||
- word: Slovakia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/lo-flag.gif
|
||||
- word: Slovenia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/si-flag.gif
|
||||
- word: Solomon Islands
|
||||
imageUrl: https://cdn.nadeko.bot/flags/bp-flag.gif
|
||||
- word: Somalia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/so-flag.gif
|
||||
- word: South Africa
|
||||
imageUrl: https://cdn.nadeko.bot/flags/sf-flag.gif
|
||||
- word: South Korea
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ks-flag.gif
|
||||
- word: South Sudan
|
||||
imageUrl: https://cdn.nadeko.bot/flags/od-flag.gif
|
||||
- word: Spain
|
||||
imageUrl: https://cdn.nadeko.bot/flags/sp-flag.gif
|
||||
- word: Sri Lanka
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ce-flag.gif
|
||||
- word: St. Vincent Grenadines
|
||||
imageUrl: https://cdn.nadeko.bot/flags/vc-flag.gif
|
||||
- word: State of Palestine
|
||||
imageUrl: https://cdn.nadeko.bot/flags/palestine-flag.gif
|
||||
- word: Sudan
|
||||
imageUrl: https://cdn.nadeko.bot/flags/su-flag.gif
|
||||
- word: Suriname
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ns-flag.gif
|
||||
- word: Sweden
|
||||
imageUrl: https://cdn.nadeko.bot/flags/sw-flag.gif
|
||||
- word: Switzerland
|
||||
imageUrl: https://cdn.nadeko.bot/flags/sz-flag.gif
|
||||
- word: Syria
|
||||
imageUrl: https://cdn.nadeko.bot/flags/sy-flag.gif
|
||||
- word: Tajikistan
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ti-flag.gif
|
||||
- word: Tanzania
|
||||
imageUrl: https://cdn.nadeko.bot/flags/tz-flag.gif
|
||||
- word: Thailand
|
||||
imageUrl: https://cdn.nadeko.bot/flags/th-flag.gif
|
||||
- word: Timor-Leste
|
||||
imageUrl: https://cdn.nadeko.bot/flags/tt-flag.gif
|
||||
- word: Togo
|
||||
imageUrl: https://cdn.nadeko.bot/flags/to-flag.gif
|
||||
- word: Tonga
|
||||
imageUrl: https://cdn.nadeko.bot/flags/tn-flag.gif
|
||||
- word: Trinidad and Tobago
|
||||
imageUrl: https://cdn.nadeko.bot/flags/td-flag.gif
|
||||
- word: Tunisia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ts-flag.gif
|
||||
- word: Turkey
|
||||
imageUrl: https://cdn.nadeko.bot/flags/tu-flag.gif
|
||||
- word: Turkmenistan
|
||||
imageUrl: https://cdn.nadeko.bot/flags/tx-flag.gif
|
||||
- word: Tuvalu
|
||||
imageUrl: https://cdn.nadeko.bot/flags/tv-flag.gif
|
||||
- word: United Arab Emirates
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ae-flag.gif
|
||||
- word: United Kingdom
|
||||
imageUrl: https://cdn.nadeko.bot/flags/uk-flag.gif
|
||||
- word: United States Of America
|
||||
imageUrl: https://cdn.nadeko.bot/flags/us-flag.gif
|
||||
- word: Uganda
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ug-flag.gif
|
||||
- word: Ukraine
|
||||
imageUrl: https://cdn.nadeko.bot/flags/up-flag.gif
|
||||
- word: Uruguay
|
||||
imageUrl: https://cdn.nadeko.bot/flags/uy-flag.gif
|
||||
- word: Uzbekistan
|
||||
imageUrl: https://cdn.nadeko.bot/flags/uz-flag.gif
|
||||
- word: Vanuatu
|
||||
imageUrl: https://cdn.nadeko.bot/flags/nh-flag.gif
|
||||
- word: Venezuela
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ve-flag.gif
|
||||
- word: Vietnam
|
||||
imageUrl: https://cdn.nadeko.bot/flags/vm-flag.gif
|
||||
- word: Yemen
|
||||
imageUrl: https://cdn.nadeko.bot/flags/ym-flag.gif
|
||||
- word: Zambia
|
||||
imageUrl: https://cdn.nadeko.bot/flags/za-flag.gif
|
||||
- word: Zimbabwe
|
||||
imageUrl: https://cdn.nadeko.bot/flags/zi-flag.gif
|
400
src/NadekoBot/data/hangman/movies.yml
Normal file
400
src/NadekoBot/data/hangman/movies.yml
Normal file
@@ -0,0 +1,400 @@
|
||||
- word: 'Underworld: Blood Wars'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/PIXSMakrO3s2dqA7mCvAAoVR0E.jpg
|
||||
- word: Fantastic Beasts and Where to Find Them
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/6I2tPx6KIiBB4TWFiWwNUzrbxUn.jpg
|
||||
- word: Suicide Squad
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/34dxtTxMHGKw1njHpTjDqR8UBHd.jpg
|
||||
- word: Miss Peregrine's Home for Peculiar Children
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/qXQinDhDZkTiqEGLnav0h1YSUu8.jpg
|
||||
- word: Sully
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/vC9H1ZVdXi1KjH4aPfGB54mvDNh.jpg
|
||||
- word: Arrival
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/yIZ1xendyqKvY3FGeeUYUd5X9Mm.jpg
|
||||
- word: Doctor Strange
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/tFI8VLMgSTTU38i8TIsklfqS9Nl.jpg
|
||||
- word: 'Mad Max: Fury Road'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/tbhdm8UJAb4ViCTsulYFL3lxMCd.jpg
|
||||
- word: Interstellar
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/xu9zaAevzQ5nnrsXN6JcahLnG4i.jpg
|
||||
- word: Jason Bourne
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/AoT2YrJUJlg5vKE3iMOLvHlTd3m.jpg
|
||||
- word: 'Captain America: Civil War'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/m5O3SZvQ6EgD5XXXLPIP1wLppeW.jpg
|
||||
- word: Moana
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/1qGzqGUd1pa05aqYXGSbLkiBlLB.jpg
|
||||
- word: 'The Hunger Games: Mockingjay - Part 1'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/83nHcz2KcnEpPXY50Ky2VldewJJ.jpg
|
||||
- word: Underworld
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/cPhRPAJWK8BuuJqqf6PztzvOlnZ.jpg
|
||||
- word: The Secret Life of Pets
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/lubzBMQLLmG88CLQ4F3TxZr2Q7N.jpg
|
||||
- word: Insurgent
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/L5QRL1O3fGs2hH1LbtYyVl8Tce.jpg
|
||||
- word: Jurassic World
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/dkMD5qlogeRMiEixC4YNPUvax2T.jpg
|
||||
- word: Ben-Hur
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/A4xbEpe9LevQCdvaNC0z6r8AfYk.jpg
|
||||
- word: Finding Dory
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/iWRKYHTFlsrxQtfQqFOQyceL83P.jpg
|
||||
- word: Guardians of the Galaxy
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/bHarw8xrmQeqf3t8HpuMY7zoK4x.jpg
|
||||
- word: Ghostbusters
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/58bvfg9b040GDmKffLUJsEjg779.jpg
|
||||
- word: Inferno
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/anmLLbDx9d98NMZRyVUtxwJR6ab.jpg
|
||||
- word: Star Trek Beyond
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/6uBlEXZCUHM15UNZqNig17VdN4m.jpg
|
||||
- word: The BFG
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/eYT9XQBo1eC4DwPYqhCol0dFFc2.jpg
|
||||
- word: Pete's Dragon
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/AaRhHX0Jfpju0O6hNzScPRgX9Mm.jpg
|
||||
- word: 'Mechanic: Resurrection'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/6kMu4vECAyTpj2Z7n8viJ4RAaYh.jpg
|
||||
- word: The Imitation Game
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/qcb6z1HpokTOKdjqDTsnjJk0Xvg.jpg
|
||||
- word: 'X-Men: Apocalypse'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/oQWWth5AOtbWG9o8SCAviGcADed.jpg
|
||||
- word: John Wick
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/mFb0ygcue4ITixDkdr7wm1Tdarx.jpg
|
||||
- word: Deadpool
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/n1y094tVDFATSzkTnFxoGZ1qNsG.jpg
|
||||
- word: 'Batman v Superman: Dawn of Justice'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/vsjBeMPZtyB7yNsYY56XYxifaQZ.jpg
|
||||
- word: The Revenant
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/kiWvoV78Cc3fUwkOHKzyBgVdrDD.jpg
|
||||
- word: Now You See Me 2
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/zrAO2OOa6s6dQMQ7zsUbDyIBrAP.jpg
|
||||
- word: 'Star Wars: The Force Awakens'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/c2Ax8Rox5g6CneChwy1gmu4UbSb.jpg
|
||||
- word: The Martian
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/sy3e2e4JwdAtd2oZGA2uUilZe8j.jpg
|
||||
- word: Bridget Jones's Baby
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/w9VNDcQet0TUoLRWHg8JbT4QjpW.jpg
|
||||
- word: Minions
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/uX7LXnsC7bZJZjn048UCOwkPXWJ.jpg
|
||||
- word: Star Wars
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/4iJfYYoQzZcONB9hNzg0J0wWyPH.jpg
|
||||
- word: Spectre
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/wVTYlkKPKrljJfugXN7UlLNjtuJ.jpg
|
||||
- word: 'Rogue One: A Star Wars Story'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/tZjVVIYXACV4IIIhXeIM59ytqwS.jpg
|
||||
- word: Big Hero 6
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/2BXd0t9JdVqCp9sKf6kzMkr7QjB.jpg
|
||||
- word: 'Independence Day: Resurgence'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/8SqBiesvo1rh9P1hbJTmnVum6jv.jpg
|
||||
- word: The Dark Knight
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/nnMC0BM6XbjIIrT4miYmMtPGcQV.jpg
|
||||
- word: Sausage Party
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/nBvyktlVHjLx5nZ9Oxaoqo5jwbf.jpg
|
||||
- word: Gone Girl
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/bt6DhdALyhf90gReozoQ0y3R3vZ.jpg
|
||||
- word: Zootopia
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/mhdeE1yShHTaDbJVdWyTlzFvNkr.jpg
|
||||
- word: Allegiant
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/sFthBeT0Y3WVfg6b3MkcJs9qfzq.jpg
|
||||
- word: 'The Hobbit: The Battle of the Five Armies'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/qhH3GyIfAnGv1pjdV3mw03qAilg.jpg
|
||||
- word: Fury
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/pKawqrtCBMmxarft7o1LbEynys7.jpg
|
||||
- word: The Jungle Book
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/eIOTsGg9FCVrBc4r2nXaV61JF4F.jpg
|
||||
- word: 'Jack Reacher: Never Go Back'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/4ynQYtSEuU5hyipcGkfD6ncwtwz.jpg
|
||||
- word: 'Pirates of the Caribbean: The Curse of the Black Pearl'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/8AUQ7YlJJA9C8kWk8P4YNHIcFDE.jpg
|
||||
- word: 'The Hunger Games: Mockingjay - Part 2'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/qjn3fzCAHGfl0CzeUlFbjrsmu4c.jpg
|
||||
- word: Hell or High Water
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/5GbRKOQSY08U3SQXXcQAKEnL2rE.jpg
|
||||
- word: Terminator Genisys
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/bIlYH4l2AyYvEysmS2AOfjO7Dn8.jpg
|
||||
- word: Ant-Man
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/kvXLZqY0Ngl1XSw7EaMQO0C1CCj.jpg
|
||||
- word: The Shallows
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/lEkHdk4g0nAKtMcHBtSmC1ON3O1.jpg
|
||||
- word: 'Underworld: Awakening'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/8iNsXY3LPsuT0gnUiTBMoNuRZI7.jpg
|
||||
- word: Inception
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/s2bT29y0ngXxxu2IA8AOzzXTRhd.jpg
|
||||
- word: 'Underworld: Evolution'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/lLZTsh8qDZsHCG9GMnqZKIlluZT.jpg
|
||||
- word: The Hateful Eight
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/sSvgNBeBNzAuKl8U8sP50ETJPgx.jpg
|
||||
- word: Fight Club
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/wSJPjqp2AZWQ6REaqkMuXsCIs64.jpg
|
||||
- word: 'Avengers: Age of Ultron'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/570qhjGZmGPrBGnfx70jcwIuBr4.jpg
|
||||
- word: 'Underworld: Rise of the Lycans'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/gVfnoiCJBdv2SN7poIbU7eyNVq1.jpg
|
||||
- word: Tomorrowland
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/fQbc5XuB4vWA9gnY1CmyxFaOufF.jpg
|
||||
- word: The Matrix
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/7u3pxc0K1wx32IleAkLv78MKgrw.jpg
|
||||
- word: Furious 7
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/ypyeMfKydpyuuTMdp36rMlkGDUL.jpg
|
||||
- word: Pixels
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/nvZVu6inpwLHKqRXZhye3S4uqei.jpg
|
||||
- word: Emerald Green
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/ioKU3dEgx0HeUWp3KI2X7YF8FdC.jpg
|
||||
- word: Whiplash
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/6bbZ6XyvgfjhQwbplnUh1LSj1ky.jpg
|
||||
- word: The Legend of Tarzan
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/pWNBPN8ghaKtGLcQBMwNyM32Wbm.jpg
|
||||
- word: Lucy
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/eCgIoGvfNXrbSiQGqQHccuHjQHm.jpg
|
||||
- word: Allied
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/6o4KCKjP1WcefXLBNRyhEenB2nW.jpg
|
||||
- word: Eliminators
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/lNhwy85HjhieIVfmWoDAL2wCchB.jpg
|
||||
- word: 'Ice Age: Collision Course'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/o29BFNqgXOUT1yHNYusnITsH7P9.jpg
|
||||
- word: Batman Begins
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/65JWXDCAfwHhJKnDwRnEgVB411X.jpg
|
||||
- word: Teenage Mutant Ninja Turtles
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/OqCXGt5nl1cHPeotxCDvXLLe6p.jpg
|
||||
- word: Birdman
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/hUDEHvhNJLNcb83Pp7xnFn0Wj09.jpg
|
||||
- word: Avatar
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/5XPPB44RQGfkBrbJxmtdndKz05n.jpg
|
||||
- word: 'Kingsman: The Secret Service'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/pfyWJUxrBTT2UIPoEQF3iFTHcQT.jpg
|
||||
- word: "Pirates of the Caribbean: At World's End"
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/8ZgpAftUiYTU76IhUADITa3Ur9n.jpg
|
||||
- word: Bad Moms
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/elPpPBuYB2Zn5wFwz2FSlJlKUjp.jpg
|
||||
- word: Inside Out
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/szytSpLAyBh3ULei3x663mAv5ZT.jpg
|
||||
- word: Harry Potter and the Philosopher's Stone
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/uD93T339xX1k3fnDUaeopZBiajY.jpg
|
||||
- word: Dawn of the Planet of the Apes
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/rjUl3pd1LHVOVfG4IGcyA1cId5l.jpg
|
||||
- word: Iron Man
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/ZQixhAZx6fH1VNafFXsqa1B8QI.jpg
|
||||
- word: The Dark Knight Rises
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/3bgtUfKQKNi3nJsAB5URpP2wdRt.jpg
|
||||
- word: Don't Breathe
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/bCThHXQ3aLLDU3KFST0rC8mTan5.jpg
|
||||
- word: The Avengers
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/hbn46fQaRmlpBuUrEiFqv0GDL6Y.jpg
|
||||
- word: Alice Through the Looking Glass
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/rWlXrfmX1FgcPyj7oQmLfwKRaam.jpg
|
||||
- word: Now You See Me
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/9wbXqcx6rHhoZ9Esp03C7amQzom.jpg
|
||||
- word: The Accountant
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/i9flZtw3BwukADQpu5PlrkwPYSY.jpg
|
||||
- word: The Maze Runner
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/yTbPPmLAn7DiiM0sPYfZduoAjB.jpg
|
||||
- word: Forrest Gump
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/ctOEhQiFIHWkiaYp7b0ibSTe5IL.jpg
|
||||
- word: 'The Hunger Games: Catching Fire'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/wRCPG1lsgfTFkWJ7G3eWgxCgv0C.jpg
|
||||
- word: Warcraft
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/5SX2rgKXZ7NVmAJR5z5LprqSXKa.jpg
|
||||
- word: 'Eddie Izzard: Glorious'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/2XHkh7xLqH168KRqMwDuiTmuyQi.jpg
|
||||
- word: Office Christmas Party
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/bzguuhqUI9G8jJ3EBtJ9p12g1Lr.jpg
|
||||
- word: 'Transformers: The Last Knight'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/lQmtMCQgBwcODAyNnKGQrW0Kza8.jpg
|
||||
- word: Skyfall
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/AunH2MIKIbnU9khgFp45eJlydPu.jpg
|
||||
- word: 'The Hobbit: An Unexpected Journey'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/jjAq3tCezdlQduusgtMhpY2XzW0.jpg
|
||||
- word: 'The Lord of the Rings: The Fellowship of the Ring'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/pIUvQ9Ed35wlWhY2oU6OmwEsmzG.jpg
|
||||
- word: Kubo and the Two Strings
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/n4FeRnlH0ERa1kCUh0NXOyQvxnd.jpg
|
||||
- word: 10 Cloverfield Lane
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/qEu2EJBQUNFx5mSKOCItwZm74ZE.jpg
|
||||
- word: 'Captain America: The First Avenger'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/pmZtj1FKvQqISS6iQbkiLg5TAsr.jpg
|
||||
- word: The Shawshank Redemption
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/xBKGJQsAIeweesB79KC89FpBrVr.jpg
|
||||
- word: Me Before You
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/o4lxNwKJz8oq3R0kLOIsDlHbDhZ.jpg
|
||||
- word: The Magnificent Seven
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/T3LrH6bnV74llVbFpQsCBrGaU9.jpg
|
||||
- word: The Lion King
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/klI0K4oQMsLhHdjA9Uw8WLugk9v.jpg
|
||||
- word: Quantum of Solace
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/hfZVY8lMiE7HH1cDc2qzSFF6Kbt.jpg
|
||||
- word: Sing
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/srpt7oa3AmmJXd2K5x9ZVzmV0I3.jpg
|
||||
- word: Nightcrawler
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/ts4j3zYaPzdUVF3ijBeBdGVDWjX.jpg
|
||||
- word: Snowden
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/qzGFm7uF1HExPUAcAPwC3Hzk5WR.jpg
|
||||
- word: The Equalizer
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/b1uY9m6sZLLfa8jxtBvZg9esSvd.jpg
|
||||
- word: Divergent
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/g6WT9zxATzTy9NVu2xwbxDAxvjd.jpg
|
||||
- word: "Pirates of the Caribbean: Dead Man's Chest"
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/hdHgIcljPHli4xaJGt0INz8Gn3J.jpg
|
||||
- word: War Dogs
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/2cLndRZy8e3das3vVaK3BdJfRIi.jpg
|
||||
- word: Pulp Fiction
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/mte63qJaVnoxkkXbHkdFujBnBgd.jpg
|
||||
- word: 'Transformers: Age of Extinction'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/cHy7nSitAVgvZ7qfCK4JO47t3oZ.jpg
|
||||
- word: Gladiator
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/5vZw7ltCKI0JiOYTtRxaIC3DX0e.jpg
|
||||
- word: Nerve
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/a0wohltYr7Tzkgg2X6QKBe3txj1.jpg
|
||||
- word: I Am Legend
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/u6Qg7TH7Oh1IFWCQSRr4htFFt0A.jpg
|
||||
- word: 'Teenage Mutant Ninja Turtles: Out of the Shadows'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/999RuhZvog8ocyvcccVV9yGmMjL.jpg
|
||||
- word: Cinderella
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/aUYcExsGuRaw7PLGmAmXubt1dfG.jpg
|
||||
- word: The Big Short
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/jmlMLYEsYY1kRc5qHIyTdxCeVmZ.jpg
|
||||
- word: 'X-Men: Days of Future Past'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/5LBcSLHAtEIIgvNkA2dPmYH5wR7.jpg
|
||||
- word: Shutter Island
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/fmLWuAfDPaUa3Vi5nO1YUUyZaX6.jpg
|
||||
- word: 'Captain America: The Winter Soldier'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/4qfXT9BtxeFuamR4F49m2mpKQI1.jpg
|
||||
- word: San Andreas
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/cUfGqafAVQkatQ7N4y08RNV3bgu.jpg
|
||||
- word: The Mummy
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/3qthpSSyBY6Efeu1sqkO8L1Eyyb.jpg
|
||||
- word: Chappie
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/y5lG7TBpeOMG0jxAaTK0ghZSzBJ.jpg
|
||||
- word: Bridge of Spies
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/3amJMLyjx0rDbwhnKNG8d6gzDSV.jpg
|
||||
- word: 'The Lord of the Rings: The Return of the King'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/8BPZO0Bf8TeAy8znF43z8soK3ys.jpg
|
||||
- word: 'Kill Bill: Vol. 1'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/kkS8PKa8c134vXsj2fQkNqOaCXU.jpg
|
||||
- word: 'Pirates of the Caribbean: On Stranger Tides'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/l7zANdjgTvYqwZUx76Vk0EKpCH5.jpg
|
||||
- word: The Nice Guys
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/a7eSkK4bkLwKCXYDdYIqLxrqT2n.jpg
|
||||
- word: Harry Potter and the Chamber of Secrets
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/avqzwKn89VetTEvAlBePt3Us6Al.jpg
|
||||
- word: 'The Lord of the Rings: The Two Towers'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/dG4BmM32XJmKiwopLDQmvXEhuHB.jpg
|
||||
- word: Titanic
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/2Te2YJoLtT2cHME7i5kDuEwJWZc.jpg
|
||||
- word: "The Huntsman: Winter's War"
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/nQ0UvXdxoMZguLuPj0sdV0U36KR.jpg
|
||||
- word: Thor
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/6UxFfo8K3vcihtUpX1ek2ucGeEZ.jpg
|
||||
- word: Taken 3
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/razvUuLkF7CX4XsLyj02ksC0ayy.jpg
|
||||
- word: Lights Out
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/nQsdGCVTEq78XwIgR6QUVxiNERI.jpg
|
||||
- word: 'Night at the Museum: Secret of the Tomb'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/6tKleiKS54focE4z0sdtLOIEgK8.jpg
|
||||
- word: Up
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/qMjbMPkSCc1K19zuXNM2BgIsIRz.jpg
|
||||
- word: The Bourne Identity
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/2Fr1vqBiDn8xRJM9elcplzHctTN.jpg
|
||||
- word: Frozen
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/cAhCDpAq80QCeQvHytY9JkBalpH.jpg
|
||||
- word: 'Thor: The Dark World'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/3FweBee0xZoY77uO1bhUOlQorNH.jpg
|
||||
- word: The Wolf of Wall Street
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/rP36Rx5RQh0rmH2ynEIaG8DxbV2.jpg
|
||||
- word: Resident Evil
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/s41Er80jGJf3tNkgYHxUCttjmwv.jpg
|
||||
- word: Iron Man 3
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/n9X2DKItL3V0yq1q1jrk8z5UAki.jpg
|
||||
- word: Ice Age
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/oDqbewoFuIEWA7UWurole6MzDGn.jpg
|
||||
- word: Central Intelligence
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/zaGmoSackrRF7w6NieQ0FWY0M7k.jpg
|
||||
- word: 'The Mummy: Tomb of the Dragon Emperor'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/caB8JFUigSHdGsdxOxaK4vZtOiN.jpg
|
||||
- word: The Man from U.N.C.L.E.
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/bKxcCNv2xq8M3GD5iSrv9bMGDVa.jpg
|
||||
- word: Gravity
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/9aoWzwOwy9NLuSk9LkBwwrBdPYM.jpg
|
||||
- word: Ex Machina
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/9X3cDZb4GYGQeOnZHLwMcCFz2Ro.jpg
|
||||
- word: Harry Potter and the Goblet of Fire
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/gzKW3emulMxIHzuXxZoyDB1lei9.jpg
|
||||
- word: Man of Steel
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/jYLh4mdOqkt30i7LTFs3o02UcGF.jpg
|
||||
- word: 'Harry Potter and the Deathly Hallows: Part 1'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/8YA36faYlkpfp6aozcGsqq68pZ9.jpg
|
||||
- word: Iron Man 2
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/jxdSxqAFrdioKgXwgTs5Qfbazjq.jpg
|
||||
- word: The Angry Birds Movie
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/3mJcfL2lPfRky16EPi95d2YrKqu.jpg
|
||||
- word: Room
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/tBhp8MGaiL3BXpPCSl5xY397sGH.jpg
|
||||
- word: Ted 2
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/nkwoiSVJLeK0NI8kTqioBna61bm.jpg
|
||||
- word: 'Exodus: Gods and Kings'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/hOOgtrByGgWfqGTTn5VL7jkLYXJ.jpg
|
||||
- word: 'Terminator 2: Judgment Day'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/d9AqtruwS8nljKjL5aYzM42hQJr.jpg
|
||||
- word: Harry Potter and the Prisoner of Azkaban
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/wWdlIBxn9xCmySxnSWtI2BjZZkF.jpg
|
||||
- word: Genius
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/5eovlgVfijObBm4TtW1QSaj32q3.jpg
|
||||
- word: Inglourious Basterds
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/bk0GylJLneaSbpQZXpgTwleYigq.jpg
|
||||
- word: Hacksaw Ridge
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/zBK4QZONMQXhcgaJv1YYTdCW7q9.jpg
|
||||
- word: Trolls
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/wc1JxADaBLuWhySkaawCBTpixCo.jpg
|
||||
- word: The Shining
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/h4DcDCOkQBENWBJZjNlPv3adQfM.jpg
|
||||
- word: A Walk Among the Tombstones
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/e56QsaJy1weAUukiK2ZmIGVUALF.jpg
|
||||
- word: Dr. No
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/bplDiT5JhaXf9S5arO8g5QsFtDi.jpg
|
||||
- word: 'Mission: Impossible'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/7CiZuIPCLvhhMICT2PONuwr2BMG.jpg
|
||||
- word: 'The Purge: Anarchy'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/1sOkQtqmBji7iquGfQlHOrFqplN.jpg
|
||||
- word: 'Maze Runner: The Scorch Trials'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/iapRFMGKvN9tsjqPlN7MIDTCezG.jpg
|
||||
- word: Jupiter Ascending
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/4liSXBZZdURI0c1Id1zLJo6Z3Gu.jpg
|
||||
- word: Morgan
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/g3XhTkjUxLbzVVa63vuopSNNZE8.jpg
|
||||
- word: Se7en
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/ba4CpvnaxvAgff2jHiaqJrVpZJ5.jpg
|
||||
- word: Charlie and the Chocolate Factory
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/mrRAx1OsNVEKJv0ktQprspieqnS.jpg
|
||||
- word: Self/less
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/fpKyGCOZJsYe2TAKLtziLe6EPj9.jpg
|
||||
- word: The Prestige
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/c5o7FN2vzI7xlU6IF1y64mgcH9E.jpg
|
||||
- word: The Departed
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/8Od5zV7Q7zNOX0y9tyNgpTmoiGA.jpg
|
||||
- word: Monsters, Inc.
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/eKBUYeSgGVvztO2MZxD5YMcz6kv.jpg
|
||||
- word: Raiders of the Lost Ark
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/dU1CArBM4YsKLfG8YvhtuTJJaGR.jpg
|
||||
- word: The Terminator
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/6yFoLNQgFdVbA8TZMdfgVpszOla.jpg
|
||||
- word: The Mummy Returns
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/22SUPrwoHNbMjZci1kRvBmCqrek.jpg
|
||||
- word: Pan
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/6Ym6bgfhvpgQS5Sg8kKnfW1hX7P.jpg
|
||||
- word: Fifty Shades of Grey
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/zw3fM9KYYhYGsIQUJOyQNbeZSnn.jpg
|
||||
- word: Casino Royale
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/xq6hXdBpDPIXWjtmvbFmtLvBFJt.jpg
|
||||
- word: Free State of Jones
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/zgo0s1fmBCWUweNrCVIK1dZEOJ6.jpg
|
||||
- word: Despicable Me
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/yo1ef57MEPkEE4BDZKTZGH9uDcX.jpg
|
||||
- word: Creed
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/nF4kmc4gDRQU4OJiJgk6sZtbJbl.jpg
|
||||
- word: Seventh Son
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/lNnrr7OR7dkqfgIyju8nUJHcf8x.jpg
|
||||
- word: The Hunger Games
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/1LTLrl06uII4w2BTpnQnmWwrKi.jpg
|
||||
- word: Saving Private Ryan
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/gRtLcCQOpYUI9ThdVzi4VUP8QO3.jpg
|
||||
- word: 'Harry Potter and the Deathly Hallows: Part 2'
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/6n0DAcyjTHS6888mt8U9ZsLy9nR.jpg
|
||||
- word: 12 Years a Slave
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/xnRPoFI7wzOYviw3PmoG94X2Lnc.jpg
|
||||
- word: Dracula Untold
|
||||
imageUrl: https://image.tmdb.org/t/p/w300_and_h450_bestv2/6UPlIYKxZqUR6Xbpgu1JKG0J7UC.jpg
|
380
src/NadekoBot/data/hangman/things.yml
Normal file
380
src/NadekoBot/data/hangman/things.yml
Normal file
@@ -0,0 +1,380 @@
|
||||
- word: apple
|
||||
imageUrl: https://www.randomlists.com/img/things/apple.jpg.jpg
|
||||
- word: bag
|
||||
imageUrl: https://www.randomlists.com/img/things/bag.jpg.jpg
|
||||
- word: balloon
|
||||
imageUrl: https://www.randomlists.com/img/things/balloon.jpg.jpg
|
||||
- word: bananas
|
||||
imageUrl: https://www.randomlists.com/img/things/bananas.jpg.jpg
|
||||
- word: bed
|
||||
imageUrl: https://www.randomlists.com/img/things/bed.jpg.jpg
|
||||
- word: beef
|
||||
imageUrl: https://www.randomlists.com/img/things/beef.jpg.jpg
|
||||
- word: blouse
|
||||
imageUrl: https://www.randomlists.com/img/things/blouse.jpg.jpg
|
||||
- word: book
|
||||
imageUrl: https://www.randomlists.com/img/things/book.jpg.jpg
|
||||
- word: bookmark
|
||||
imageUrl: https://www.randomlists.com/img/things/bookmark.jpg.jpg
|
||||
- word: boom box
|
||||
imageUrl: https://www.randomlists.com/img/things/boom_box.jpg.jpg
|
||||
- word: bottle
|
||||
imageUrl: https://www.randomlists.com/img/things/bottle.jpg.jpg
|
||||
- word: bottle cap
|
||||
imageUrl: https://www.randomlists.com/img/things/bottle_cap.jpg
|
||||
- word: bow
|
||||
imageUrl: https://www.randomlists.com/img/things/bow.jpg
|
||||
- word: bowl
|
||||
imageUrl: https://www.randomlists.com/img/things/bowl.jpg
|
||||
- word: box
|
||||
imageUrl: https://www.randomlists.com/img/things/box.jpg
|
||||
- word: bracelet
|
||||
imageUrl: https://www.randomlists.com/img/things/bracelet.jpg
|
||||
- word: bread
|
||||
imageUrl: https://www.randomlists.com/img/things/bread.jpg
|
||||
- word: broccoli
|
||||
imageUrl: https://www.randomlists.com/img/things/brocolli.jpg
|
||||
- word: hair brush
|
||||
imageUrl: https://www.randomlists.com/img/things/hair_brush.jpg
|
||||
- word: buckle
|
||||
imageUrl: https://www.randomlists.com/img/things/buckel.jpg
|
||||
- word: button
|
||||
imageUrl: https://www.randomlists.com/img/things/button.jpg
|
||||
- word: camera
|
||||
imageUrl: https://www.randomlists.com/img/things/camera.jpg
|
||||
- word: candle
|
||||
imageUrl: https://www.randomlists.com/img/things/candle.jpg
|
||||
- word: candy wrapper
|
||||
imageUrl: https://www.randomlists.com/img/things/candy_wrapper.jpg
|
||||
- word: canvas
|
||||
imageUrl: https://www.randomlists.com/img/things/canvas.jpg
|
||||
- word: car
|
||||
imageUrl: https://www.randomlists.com/img/things/car.jpg
|
||||
- word: greeting card
|
||||
imageUrl: https://www.randomlists.com/img/things/greeting_card.jpg
|
||||
- word: playing card
|
||||
imageUrl: https://www.randomlists.com/img/things/playing_card.jpg
|
||||
- word: carrots
|
||||
imageUrl: https://www.randomlists.com/img/things/carrots.jpg
|
||||
- word: cat
|
||||
imageUrl: https://www.randomlists.com/img/things/cat.jpg
|
||||
- word: CD
|
||||
imageUrl: https://www.randomlists.com/img/things/CD.jpg
|
||||
- word: cell phone
|
||||
imageUrl: https://www.randomlists.com/img/things/cell_phone.jpg
|
||||
- word: packing peanuts
|
||||
imageUrl: https://www.randomlists.com/img/things/packing_peanuts.jpg
|
||||
- word: cinder block
|
||||
imageUrl: https://www.randomlists.com/img/things/cinder_block.jpg
|
||||
- word: chair
|
||||
imageUrl: https://www.randomlists.com/img/things/chair.jpg
|
||||
- word: chalk
|
||||
imageUrl: https://www.randomlists.com/img/things/chalk.jpg
|
||||
- word: newspaper
|
||||
imageUrl: https://www.randomlists.com/img/things/newspaper.jpg
|
||||
- word: soy sauce packet
|
||||
imageUrl: https://www.randomlists.com/img/things/soy_sauce_packet.jpg
|
||||
- word: chapter book
|
||||
imageUrl: https://www.randomlists.com/img/things/chapter_book.jpg
|
||||
- word: checkbook
|
||||
imageUrl: https://www.randomlists.com/img/things/checkbook.jpg
|
||||
- word: chocolate
|
||||
imageUrl: https://www.randomlists.com/img/things/chocolate.jpg
|
||||
- word: clay pot
|
||||
imageUrl: https://www.randomlists.com/img/things/clay_pot.jpg
|
||||
- word: clock
|
||||
imageUrl: https://www.randomlists.com/img/things/clock.jpg
|
||||
- word: clothes
|
||||
imageUrl: https://www.randomlists.com/img/things/clothes.jpg
|
||||
- word: computer
|
||||
imageUrl: https://www.randomlists.com/img/things/computer.jpg
|
||||
- word: conditioner
|
||||
imageUrl: https://www.randomlists.com/img/things/conditioner.jpg
|
||||
- word: cookie jar
|
||||
imageUrl: https://www.randomlists.com/img/things/cookie_jar.jpg
|
||||
- word: cork
|
||||
imageUrl: https://www.randomlists.com/img/things/cork.jpg
|
||||
- word: couch
|
||||
imageUrl: https://www.randomlists.com/img/things/couch.jpg
|
||||
- word: credit card
|
||||
imageUrl: https://www.randomlists.com/img/things/credit_card.jpg
|
||||
- word: cup
|
||||
imageUrl: https://www.randomlists.com/img/things/cup.jpg
|
||||
- word: deodorant
|
||||
imageUrl: https://www.randomlists.com/img/things/deodorant_.jpg
|
||||
- word: desk
|
||||
imageUrl: https://www.randomlists.com/img/things/desk.jpg
|
||||
- word: door
|
||||
imageUrl: https://www.randomlists.com/img/things/door.jpg
|
||||
- word: drawer
|
||||
imageUrl: https://www.randomlists.com/img/things/drawer.jpg
|
||||
- word: drill press
|
||||
imageUrl: https://www.randomlists.com/img/things/drill_press.jpg
|
||||
- word: eraser
|
||||
imageUrl: https://www.randomlists.com/img/things/earser.jpg
|
||||
- word: eye liner
|
||||
imageUrl: https://www.randomlists.com/img/things/eye_liner.jpg
|
||||
- word: face wash
|
||||
imageUrl: https://www.randomlists.com/img/things/face_wash.jpg
|
||||
- word: fake flowers
|
||||
imageUrl: https://www.randomlists.com/img/things/fake_flowers.jpg
|
||||
- word: flag
|
||||
imageUrl: https://www.randomlists.com/img/things/flag.jpg
|
||||
- word: floor
|
||||
imageUrl: https://www.randomlists.com/img/things/floor.jpg
|
||||
- word: flowers
|
||||
imageUrl: https://www.randomlists.com/img/things/flowers.jpg
|
||||
- word: food
|
||||
imageUrl: https://www.randomlists.com/img/things/food.jpg
|
||||
- word: fork
|
||||
imageUrl: https://www.randomlists.com/img/things/fork.jpg
|
||||
- word: fridge
|
||||
imageUrl: https://www.randomlists.com/img/things/fridge.jpg
|
||||
- word: glass
|
||||
imageUrl: https://www.randomlists.com/img/things/glass.jpg
|
||||
- word: glasses
|
||||
imageUrl: https://www.randomlists.com/img/things/glasses.jpg
|
||||
- word: glow stick
|
||||
imageUrl: https://www.randomlists.com/img/things/glow_stick.jpg
|
||||
- word: grid paper
|
||||
imageUrl: https://www.randomlists.com/img/things/grid_paper.jpg
|
||||
- word: hair tie
|
||||
imageUrl: https://www.randomlists.com/img/things/hair_tie.jpg
|
||||
- word: hanger
|
||||
imageUrl: https://www.randomlists.com/img/things/hanger.jpg
|
||||
- word: helmet
|
||||
imageUrl: https://www.randomlists.com/img/things/helmet.jpg
|
||||
- word: house
|
||||
imageUrl: https://www.randomlists.com/img/things/house.jpg
|
||||
- word: ipod
|
||||
imageUrl: https://www.randomlists.com/img/things/ipod.jpg
|
||||
- word: charger
|
||||
imageUrl: https://www.randomlists.com/img/things/charger.jpg
|
||||
- word: key chain
|
||||
imageUrl: https://www.randomlists.com/img/things/key_chain.jpg
|
||||
- word: keyboard
|
||||
imageUrl: https://www.randomlists.com/img/things/keyboard.jpg
|
||||
- word: keys
|
||||
imageUrl: https://www.randomlists.com/img/things/keys.jpg
|
||||
- word: knife
|
||||
imageUrl: https://www.randomlists.com/img/things/knife.jpg
|
||||
- word: lace
|
||||
imageUrl: https://www.randomlists.com/img/things/lace.jpg
|
||||
- word: lamp
|
||||
imageUrl: https://www.randomlists.com/img/things/lamp.jpg
|
||||
- word: lamp shade
|
||||
imageUrl: https://www.randomlists.com/img/things/lamp_shade.jpg
|
||||
- word: leg warmers
|
||||
imageUrl: https://www.randomlists.com/img/things/leg_warmers.jpg
|
||||
- word: lip gloss
|
||||
imageUrl: https://www.randomlists.com/img/things/lip_gloss.jpg
|
||||
- word: lotion
|
||||
imageUrl: https://www.randomlists.com/img/things/lotion.jpg
|
||||
- word: milk
|
||||
imageUrl: https://www.randomlists.com/img/things/milk.jpg
|
||||
- word: mirror
|
||||
imageUrl: https://www.randomlists.com/img/things/mirror.jpg
|
||||
- word: model car
|
||||
imageUrl: https://www.randomlists.com/img/things/model_car.jpg
|
||||
- word: money
|
||||
imageUrl: https://www.randomlists.com/img/things/money.jpg
|
||||
- word: monitor
|
||||
imageUrl: https://www.randomlists.com/img/things/monitor.jpg
|
||||
- word: mop
|
||||
imageUrl: https://www.randomlists.com/img/things/mop.jpg
|
||||
- word: mouse pad
|
||||
imageUrl: https://www.randomlists.com/img/things/mouse_pad.jpg
|
||||
- word: mp3 player
|
||||
imageUrl: https://www.randomlists.com/img/things/mp3_player.jpg
|
||||
- word: nail clippers
|
||||
imageUrl: https://www.randomlists.com/img/things/nail_clippers.jpg
|
||||
- word: nail file
|
||||
imageUrl: https://www.randomlists.com/img/things/nail_file.jpg
|
||||
- word: needle
|
||||
imageUrl: https://www.randomlists.com/img/things/needle.jpg
|
||||
- word: outlet
|
||||
imageUrl: https://www.randomlists.com/img/things/outlet.jpg
|
||||
- word: paint brush
|
||||
imageUrl: https://www.randomlists.com/img/things/paint_brush.jpg
|
||||
- word: pants
|
||||
imageUrl: https://www.randomlists.com/img/things/pants.jpg
|
||||
- word: paper
|
||||
imageUrl: https://www.randomlists.com/img/things/paper.jpg
|
||||
- word: pen
|
||||
imageUrl: https://www.randomlists.com/img/things/pen.jpg
|
||||
- word: pencil
|
||||
imageUrl: https://www.randomlists.com/img/things/pencil.jpg
|
||||
- word: perfume
|
||||
imageUrl: https://www.randomlists.com/img/things/perfume.jpg
|
||||
- word: phone
|
||||
imageUrl: https://www.randomlists.com/img/things/phone.jpg
|
||||
- word: photo album
|
||||
imageUrl: https://www.randomlists.com/img/things/photo_album.jpg
|
||||
- word: picture frame
|
||||
imageUrl: https://www.randomlists.com/img/things/picture_frame.jpg
|
||||
- word: pillow
|
||||
imageUrl: https://www.randomlists.com/img/things/pillow.jpg
|
||||
- word: plastic fork
|
||||
imageUrl: https://www.randomlists.com/img/things/plastic_fork.jpg
|
||||
- word: plate
|
||||
imageUrl: https://www.randomlists.com/img/things/plate.jpg
|
||||
- word: pool stick
|
||||
imageUrl: https://www.randomlists.com/img/things/pool_stick.jpg
|
||||
- word: soda can
|
||||
imageUrl: https://www.randomlists.com/img/things/soda_can.jpg
|
||||
- word: puddle
|
||||
imageUrl: https://www.randomlists.com/img/things/puddle.jpg
|
||||
- word: purse
|
||||
imageUrl: https://www.randomlists.com/img/things/purse.jpg
|
||||
- word: blanket
|
||||
imageUrl: https://www.randomlists.com/img/things/blanket.jpg
|
||||
- word: radio
|
||||
imageUrl: https://www.randomlists.com/img/things/radio.jpg
|
||||
- word: remote
|
||||
imageUrl: https://www.randomlists.com/img/things/remote.jpg
|
||||
- word: ring
|
||||
imageUrl: https://www.randomlists.com/img/things/ring.jpg
|
||||
- word: rubber band
|
||||
imageUrl: https://www.randomlists.com/img/things/rubber_band.jpg
|
||||
- word: rubber duck
|
||||
imageUrl: https://www.randomlists.com/img/things/rubber_duck.jpg
|
||||
- word: rug
|
||||
imageUrl: https://www.randomlists.com/img/things/rug.jpg
|
||||
- word: rusty nail
|
||||
imageUrl: https://www.randomlists.com/img/things/rusty_nail.jpg
|
||||
- word: sailboat
|
||||
imageUrl: https://www.randomlists.com/img/things/sailboat.jpg
|
||||
- word: sand paper
|
||||
imageUrl: https://www.randomlists.com/img/things/sand_paper.jpg
|
||||
- word: sandal
|
||||
imageUrl: https://www.randomlists.com/img/things/sandal.jpg
|
||||
- word: scotch tape
|
||||
imageUrl: https://www.randomlists.com/img/things/scotch_tape.jpg
|
||||
- word: screw
|
||||
imageUrl: https://www.randomlists.com/img/things/screw.jpg
|
||||
- word: seat belt
|
||||
imageUrl: https://www.randomlists.com/img/things/seat_belt.jpg
|
||||
- word: shampoo
|
||||
imageUrl: https://www.randomlists.com/img/things/shampoo.jpg
|
||||
- word: sharpie
|
||||
imageUrl: https://www.randomlists.com/img/things/sharpie.jpg
|
||||
- word: shawl
|
||||
imageUrl: https://www.randomlists.com/img/things/shawl.jpg
|
||||
- word: shirt
|
||||
imageUrl: https://www.randomlists.com/img/things/shirt.jpg
|
||||
- word: shoe lace
|
||||
imageUrl: https://www.randomlists.com/img/things/shoe_lace.jpg
|
||||
- word: shoes
|
||||
imageUrl: https://www.randomlists.com/img/things/shoes.jpg
|
||||
- word: shovel
|
||||
imageUrl: https://www.randomlists.com/img/things/shovel.jpg
|
||||
- word: sidewalk
|
||||
imageUrl: https://www.randomlists.com/img/things/sidewalk.jpg
|
||||
- word: sketch pad
|
||||
imageUrl: https://www.randomlists.com/img/things/sketch_pad.jpg
|
||||
- word: slipper
|
||||
imageUrl: https://www.randomlists.com/img/things/slipper.jpg
|
||||
- word: soap
|
||||
imageUrl: https://www.randomlists.com/img/things/soap.jpg
|
||||
- word: socks
|
||||
imageUrl: https://www.randomlists.com/img/things/socks.jpg
|
||||
- word: sofa
|
||||
imageUrl: https://www.randomlists.com/img/things/sofa.jpg
|
||||
- word: speakers
|
||||
imageUrl: https://www.randomlists.com/img/things/speakers.jpg
|
||||
- word: sponge
|
||||
imageUrl: https://www.randomlists.com/img/things/sponge.jpg
|
||||
- word: spoon
|
||||
imageUrl: https://www.randomlists.com/img/things/spoon.jpg
|
||||
- word: spring
|
||||
imageUrl: https://www.randomlists.com/img/things/spring.jpg
|
||||
- word: sticky note
|
||||
imageUrl: https://www.randomlists.com/img/things/sticky_note.jpg
|
||||
- word: stockings
|
||||
imageUrl: https://www.randomlists.com/img/things/stockings.jpg
|
||||
- word: stop sign
|
||||
imageUrl: https://www.randomlists.com/img/things/stop_sign.jpg
|
||||
- word: street lights
|
||||
imageUrl: https://www.randomlists.com/img/things/street_lights.jpg
|
||||
- word: sun glasses
|
||||
imageUrl: https://www.randomlists.com/img/things/sun_glasses.jpg
|
||||
- word: table
|
||||
imageUrl: https://www.randomlists.com/img/things/table.jpg
|
||||
- word: teddies
|
||||
imageUrl: https://www.randomlists.com/img/things/teddies.jpg
|
||||
- word: television
|
||||
imageUrl: https://www.randomlists.com/img/things/television.jpg
|
||||
- word: thermometer
|
||||
imageUrl: https://www.randomlists.com/img/things/thermometer.jpg
|
||||
- word: thread
|
||||
imageUrl: https://www.randomlists.com/img/things/thread.jpg
|
||||
- word: tire swing
|
||||
imageUrl: https://www.randomlists.com/img/things/tire_swing.jpg
|
||||
- word: tissue box
|
||||
imageUrl: https://www.randomlists.com/img/things/tissue_box.jpg
|
||||
- word: toe ring
|
||||
imageUrl: https://www.randomlists.com/img/things/toe_ring.jpg
|
||||
- word: toilet
|
||||
imageUrl: https://www.randomlists.com/img/things/toilet.jpg
|
||||
- word: tomato
|
||||
imageUrl: https://www.randomlists.com/img/things/tomato.jpg
|
||||
- word: tooth picks
|
||||
imageUrl: https://www.randomlists.com/img/things/tooth_picks.jpg
|
||||
- word: toothbrush
|
||||
imageUrl: https://www.randomlists.com/img/things/toothbrush.jpg
|
||||
- word: toothpaste
|
||||
imageUrl: https://www.randomlists.com/img/things/toothpaste.jpg
|
||||
- word: towel
|
||||
imageUrl: https://www.randomlists.com/img/things/towel.jpg
|
||||
- word: tree
|
||||
imageUrl: https://www.randomlists.com/img/things/tree.jpg
|
||||
- word: truck
|
||||
imageUrl: https://www.randomlists.com/img/things/truck.jpg
|
||||
- word: tv
|
||||
imageUrl: https://www.randomlists.com/img/things/tv.jpg
|
||||
- word: tweezers
|
||||
imageUrl: https://www.randomlists.com/img/things/twezzers.jpg
|
||||
- word: twister
|
||||
imageUrl: https://www.randomlists.com/img/things/twister.jpg
|
||||
- word: vase
|
||||
imageUrl: https://www.randomlists.com/img/things/vase.jpg
|
||||
- word: video games
|
||||
imageUrl: https://www.randomlists.com/img/things/video_games.jpg
|
||||
- word: wallet
|
||||
imageUrl: https://www.randomlists.com/img/things/wallet.jpg
|
||||
- word: washing machine
|
||||
imageUrl: https://www.randomlists.com/img/things/washing_machine.jpg
|
||||
- word: watch
|
||||
imageUrl: https://www.randomlists.com/img/things/watch.jpg
|
||||
- word: water bottle
|
||||
imageUrl: https://www.randomlists.com/img/things/water_bottle.jpg
|
||||
- word: doll
|
||||
imageUrl: https://www.randomlists.com/img/things/doll.jpg
|
||||
- word: magnet
|
||||
imageUrl: https://www.randomlists.com/img/things/magnet.jpg
|
||||
- word: wagon
|
||||
imageUrl: https://www.randomlists.com/img/things/wagon.jpg
|
||||
- word: headphones
|
||||
imageUrl: https://www.randomlists.com/img/things/headphones.jpg
|
||||
- word: clamp
|
||||
imageUrl: https://www.randomlists.com/img/things/clamp.jpg
|
||||
- word: USB drive
|
||||
imageUrl: https://www.randomlists.com/img/things/USB_drive.jpg
|
||||
- word: air freshener
|
||||
imageUrl: https://www.randomlists.com/img/things/air_freshener.jpg
|
||||
- word: piano
|
||||
imageUrl: https://www.randomlists.com/img/things/piano.jpg
|
||||
- word: ice cube tray
|
||||
imageUrl: https://www.randomlists.com/img/things/ice_cube_tray.jpg
|
||||
- word: white out
|
||||
imageUrl: https://www.randomlists.com/img/things/white_out.jpg
|
||||
- word: window
|
||||
imageUrl: https://www.randomlists.com/img/things/window.jpg
|
||||
- word: controller
|
||||
imageUrl: https://www.randomlists.com/img/things/controller.jpg
|
||||
- word: coasters
|
||||
imageUrl: https://www.randomlists.com/img/things/coasters.jpg
|
||||
- word: thermostat
|
||||
imageUrl: https://www.randomlists.com/img/things/thermostat.jpg
|
||||
- word: zipper
|
||||
imageUrl: https://www.randomlists.com/img/things/zipper.jpg
|
@@ -100,9 +100,11 @@ logserver:
|
||||
- "enable"
|
||||
- "disable"
|
||||
logignore:
|
||||
desc: "Toggles whether the `{0}logserver` command ignores this channel. Useful if you have hidden admin channel and public log channel."
|
||||
desc: "Toggles whether the `{0}logserver` command ignores the specified channel or user. Provide no arguments to see the list of currently ignored users and channels"
|
||||
args:
|
||||
- ""
|
||||
- "@SomeUser"
|
||||
- "#some-channel"
|
||||
repeatlist:
|
||||
desc: "Shows currently repeating messages and their indexes."
|
||||
args:
|
||||
@@ -1319,11 +1321,11 @@ magicthegathering:
|
||||
args:
|
||||
- "about face"
|
||||
hangmanlist:
|
||||
desc: "Shows a list of hangman term types."
|
||||
desc: "Shows a list of hangman question categories."
|
||||
args:
|
||||
- ""
|
||||
hangman:
|
||||
desc: "Starts a game of hangman in the channel. Use `{0}hangmanlist` to see a list of available term types. Defaults to 'all'."
|
||||
desc: "Starts a game of hangman in the channel. You can optionally select a category `{0}hangmanlist` to see a list of available categories."
|
||||
args:
|
||||
- ""
|
||||
- "movies"
|
||||
|
@@ -94,8 +94,12 @@
|
||||
"log_all": "Logging all events in this channel.",
|
||||
"log_disabled": "Logging disabled.",
|
||||
"log_events": "Log events you can subscribe to:",
|
||||
"log_ignore": "Logging will ignore {0}",
|
||||
"log_not_ignore": "Logging will not ignore {0}",
|
||||
"log_ignored_channels": "Ignored Channels",
|
||||
"log_ignored_users": "Ignored Users",
|
||||
"log_ignore_user": "Logging will ignore user {0}",
|
||||
"log_not_ignore_user": "Logging will no longer ignore user {0}",
|
||||
"log_ignore_chan": "Logging will ignore channel {0}",
|
||||
"log_not_ignore_chan": "Logging will no longer ignore channel {0}",
|
||||
"log_stop": "Stopped logging {0} event.",
|
||||
"message_sent": "Message sent.",
|
||||
"msg_not_found": "Message not found.",
|
||||
@@ -463,8 +467,8 @@
|
||||
"api_key_missing": "Api key missing.",
|
||||
"invalid_input": "Invalid input.",
|
||||
"not_found": "Not found.",
|
||||
"failed_finding_anime": "Failed finding that animu.",
|
||||
"failed_finding_manga": "Failed finding that mango.",
|
||||
"failed_finding_anime": "Failed finding that anime.",
|
||||
"failed_finding_manga": "Failed finding that manga.",
|
||||
"genres": "Genres",
|
||||
"authors": "Authors",
|
||||
"height_weight": "Height/Weight",
|
||||
|
Reference in New Issue
Block a user