Compare commits

...

17 Commits
3.0.5 ... 3.0.7

Author SHA1 Message Date
Kwoth
db7cf3d757 Upped version to 3.0.7, Updated changelog 2021-10-05 13:12:28 +02:00
Kwoth
83ea046d5f Fixed %users% and %shard.usercount% placeholders not showing correct member count 2021-10-05 13:09:52 +02:00
Kwoth
d5c94424e9 Merge branch 'v3-docker' into 'v3'
install youtube-dl through pip for a better availability of cdn

See merge request Kwoth/nadekobot!165
2021-10-01 08:26:15 +00:00
Kwoth
ff95b3d00f - .streamsclear re-added. It will remove all followed streams on the server.
- .gifts now have 3 new ✂️ Haircut 🧻 ToiletPaper and 🥀 WiltedRose which **reduce** waifu's value
- Added a new multiplier (waifu.multi.negative_gift_effect default 0.5, changeable via .config gambling or data/gambling.yml)
2021-09-30 08:53:15 +02:00
Veovis
4b5fa3bb04 install youtube-dl through pip for a better availability of cdn 2021-09-27 21:21:44 +02:00
Kwoth
52c9ec670d Upped version to 3.0.6. Slightly updated hangman help string 2021-09-27 10:57:10 +02:00
Kwoth
1ac472c676 Urls will now properly work in embeds. Fixes #306 2021-09-27 10:52:14 +02:00
Kwoth
39f01a3164 Merge branch 'v3-dev' into 'v3'
Hangman Rewrite

See merge request Kwoth/nadekobot!164
2021-09-27 02:00:19 +00:00
Kwoth
486916944b Hangman Rewrite 2021-09-27 02:00:19 +00:00
Kwoth
68e96cd1bb Merge branch 'v3-docker' into 'v3'
V3 docker

See merge request Kwoth/nadekobot!163
2021-09-27 00:10:18 +00:00
Veovis
5a647d100a V3 docker 2021-09-27 00:10:18 +00:00
Kwoth
a562a571e2 - .shopadd will now ignore negative price input
- Make sure bot has manage roles permission for .xprr
- Small cleanup
2021-09-22 23:07:23 +02:00
Kwoth
12146ad2da Make sure the bot has manageroles permission for .aar 2021-09-22 22:41:00 +02:00
Kwoth
453ac3efd2 Re-did migration as the old one was wrong 2021-09-21 22:48:18 +02:00
Kwoth
c9e89e1911 - .logignore now supports targeting channels and users
- .logignore now lists all ignored channels and users when no parameter is provided
- Renamed and cleaned up some log-related fields
2021-09-21 22:39:24 +02:00
Kwoth
611817f78a Yes, it's just a warning 2021-09-21 20:59:05 +02:00
Kwoth
2e66137f3e Fixed an exception which was breaking repeater loop 2021-09-21 20:28:37 +02:00
55 changed files with 5930 additions and 5178 deletions

View File

@@ -9,6 +9,7 @@
!src/NadekoBot.Generators/**
# Use Ayu stuff
!src/ayu/**
!docker-entrypoint.sh
# ignore bin and obj folders in projects
src/**/bin/*

View File

@@ -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

View File

@@ -4,15 +4,47 @@ Experimental changelog. Mostly based on [keepachangelog](https://keepachangelog.
## Unreleased
## [3.0.7]
### Added
- `.streamsclear` re-added. It will remove all followed streams on the server.
- `.gifts` now have 3 new ✂️ Haircut 🧻 ToiletPaper and 🥀 WiltedRose which **reduce** waifu's value
- They are called negative gifts
- They show up at the end of the `.gifts` page and are marked with a broken heart
- They have a separate multiplier (`waifu.multi.negative_gift_effect` default 0.5, changeable via `.config gambling` or `data/gambling.yml`)
- When gifted, the waifu's price will be reduced by the `price * multiplier`
- Negative gifts don't show up in `.waifuinfo` nor is the record of them kept in the database
### Fixed
- Fixed `%users%` and `%shard.usercount%` placeholders not showing correct values
## [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`
@@ -20,6 +52,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

View File

@@ -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,34 @@ 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 python3-pip 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; \
pip3 install --upgrade youtube-dl; \
apt-get remove -y python3-pip; \
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
View 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 "$@"

View File

@@ -177,13 +177,13 @@ namespace NadekoBot.Common.Replacements
/*OBSOLETE*/
_reps.TryAdd("%servers%", () => c.Guilds.Count.ToString());
#if !GLOBAL_NADEKO
_reps.TryAdd("%users%", () => c.Guilds.Sum(s => s.Users.Count).ToString());
_reps.TryAdd("%users%", () => c.Guilds.Sum(g => g.MemberCount).ToString());
#endif
/*NEW*/
_reps.TryAdd("%shard.servercount%", () => c.Guilds.Count.ToString());
#if !GLOBAL_NADEKO
_reps.TryAdd("%shard.usercount%", () => c.Guilds.Sum(s => s.Users.Count).ToString());
_reps.TryAdd("%shard.usercount%", () => c.Guilds.Sum(g => g.MemberCount).ToString());
#endif
_reps.TryAdd("%shard.id%", () => c.ShardId.ToString());
return this;

View File

@@ -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();

View File

@@ -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,7 +118,7 @@ namespace NadekoBot.Db
{
var logSetting = ctx.LogSettings
.AsQueryable()
.Include(x => x.IgnoredChannels)
.Include(x => x.LogIgnores)
.Where(x => x.GuildId == guildId)
.FirstOrDefault();

View File

@@ -1,8 +0,0 @@
namespace NadekoBot.Services.Database.Models
{
public class IgnoredLogChannel : DbEntity
{
public LogSetting LogSetting { get; set; }
public ulong ChannelId { get; set; }
}
}

View 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,
}
}

View File

@@ -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; }

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -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);
}
}
}

View File

@@ -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 =>

View File

@@ -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))

View File

@@ -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]

View File

@@ -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;

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using Cloneable;
using NadekoBot.Common;
using NadekoBot.Common.Yml;
using YamlDotNet.Serialization;
namespace NadekoBot.Modules.Gambling.Common
{
@@ -179,7 +180,8 @@ default is 0.02, which is 2%")]
public MultipliersData Multipliers { get; set; } = new MultipliersData();
[Comment(@"List of items available for gifting.")]
[Comment(@"List of items available for gifting.
If negative is true, gift will instead reduce waifu value.")]
public List<WaifuItemModel> Items { get; set; } = new List<WaifuItemModel>();
public WaifuConfig()
@@ -260,6 +262,11 @@ Default 1 (meaning no effect)")]
Default 0.95 (meaning 95%)
Example: If a waifu is worth 1000, and she receives a gift worth 100, her new value will be 1095)")]
public decimal GiftEffect { get; set; } = 0.95M;
[Comment(@"What percentage of the value of the gift will a waifu lose when she's gifted a gift marked as 'negative'.
Default 0.5 (meaning 50%)
Example: If a waifu is worth 1000, and she receives a negative gift worth 100, her new value will be 950)")]
public decimal NegativeGiftEffect { get; set; } = 0.50M;
}
[Cloneable]
@@ -268,19 +275,24 @@ Example: If a waifu is worth 1000, and she receives a gift worth 100, her new va
public string ItemEmoji { get; set; }
public int Price { get; set; }
public string Name { get; set; }
[YamlMember(DefaultValuesHandling = DefaultValuesHandling.OmitDefaults)]
public bool Negative { get; set; }
public WaifuItemModel()
{
}
public WaifuItemModel(string itemEmoji, int price, string name)
public WaifuItemModel(string itemEmoji, int price, string name, bool negative = false)
{
ItemEmoji = itemEmoji;
Price = price;
Name = name;
Negative = negative;
}
public override string ToString() => Name;
}

View File

@@ -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;
}
}
}

View File

@@ -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),

View File

@@ -1,7 +1,11 @@
using NadekoBot.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using NadekoBot.Common;
using NadekoBot.Common.Configs;
using NadekoBot.Modules.Gambling.Common;
using NadekoBot.Services;
using NadekoBot.Services.Database.Models;
namespace NadekoBot.Modules.Gambling.Services
{
@@ -34,9 +38,31 @@ namespace NadekoBot.Modules.Gambling.Services
AddParsedProp("waifu.multi.divorce_value", gs => gs.Waifu.Multipliers.DivorceNewValue, decimal.TryParse, ConfigPrinters.ToString, val => val > 0);
AddParsedProp("waifu.multi.all_gifts", gs => gs.Waifu.Multipliers.AllGiftPrices, decimal.TryParse, ConfigPrinters.ToString, val => val > 0);
AddParsedProp("waifu.multi.gift_effect", gs => gs.Waifu.Multipliers.GiftEffect, decimal.TryParse, ConfigPrinters.ToString, val => val >= 0);
AddParsedProp("waifu.multi.negative_gift_effect", gs => gs.Waifu.Multipliers.NegativeGiftEffect, decimal.TryParse, ConfigPrinters.ToString, val => val >= 0);
AddParsedProp("decay.percent", gs => gs.Decay.Percent, decimal.TryParse, ConfigPrinters.ToString, val => val >= 0 && val <= 1);
AddParsedProp("decay.maxdecay", gs => gs.Decay.MaxDecay, int.TryParse, ConfigPrinters.ToString, val => val >= 0);
AddParsedProp("decay.threshold", gs => gs.Decay.MinThreshold, int.TryParse, ConfigPrinters.ToString, val => val >= 0);
Migrate();
}
private readonly IEnumerable<WaifuItemModel> antiGiftSeed = new[]
{
new WaifuItemModel("🥀", 100, "WiltedRose", true),
new WaifuItemModel("✂️", 1000, "Haircut", true),
new WaifuItemModel("🧻", 10000, "ToiletPaper", true),
};
public void Migrate()
{
if (_data.Version < 2)
{
ModifyConfig(c =>
{
c.Waifu.Items = c.Waifu.Items.Concat(antiGiftSeed).ToList();
c.Version = 2;
});
}
}
}
}

View File

@@ -394,19 +394,28 @@ namespace NadekoBot.Modules.Gambling.Services
});
}
w.Items.Add(new WaifuItem()
if (!itemObj.Negative)
{
Name = itemObj.Name.ToLowerInvariant(),
ItemEmoji = itemObj.ItemEmoji,
});
if (w.Claimer?.UserId == from.Id)
{
w.Price += (int) (itemObj.Price * _gss.Data.Waifu.Multipliers.GiftEffect);
w.Items.Add(new WaifuItem()
{
Name = itemObj.Name.ToLowerInvariant(),
ItemEmoji = itemObj.ItemEmoji,
});
if (w.Claimer?.UserId == from.Id)
{
w.Price += (int)(itemObj.Price * _gss.Data.Waifu.Multipliers.GiftEffect);
}
else
{
w.Price += itemObj.Price / 2;
}
}
else
{
w.Price += itemObj.Price / 2;
w.Price -= (int)(itemObj.Price * _gss.Data.Waifu.Multipliers.NegativeGiftEffect);
if (w.Price < 1)
w.Price = 1;
}
await uow.SaveChangesAsync();
@@ -512,7 +521,7 @@ namespace NadekoBot.Modules.Gambling.Services
{
var conf = _gss.Data;
return conf.Waifu.Items
.Select(x => new WaifuItemModel(x.ItemEmoji, (int)(x.Price * conf.Waifu.Multipliers.AllGiftPrices), x.Name))
.Select(x => new WaifuItemModel(x.ItemEmoji, (int)(x.Price * conf.Waifu.Multipliers.AllGiftPrices), x.Name, x.Negative))
.ToList();
}
}

View File

@@ -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);
}

View File

@@ -317,10 +317,14 @@ namespace NadekoBot.Modules.Gambling
.WithOkColor();
waifuItems
.OrderBy(x => x.Price)
.OrderBy(x => x.Negative)
.ThenBy(x => x.Price)
.Skip(9 * cur)
.Take(9)
.ForEach(x => embed.AddField($"{x.ItemEmoji} {x.Name}", x.Price, true));
.ForEach(x => embed
.AddField($"{(!x.Negative ? string.Empty : "\\💔")} {x.ItemEmoji} {x.Name}",
Format.Bold(x.Price.ToString()) + _config.Currency.Sign,
true));
return embed;
}, waifuItems.Count, 9);

View File

@@ -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;
}
}
}

View File

@@ -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)
{
}
}
}

View File

@@ -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();
}
}
}

View File

@@ -0,0 +1,121 @@
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);
}
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);
}
}
}

View File

@@ -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(' ', '_')})";
}
}
}

View 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);
}
}
}

View File

@@ -0,0 +1,8 @@
namespace NadekoBot.Modules.Games.Hangman
{
public sealed class HangmanTerm
{
public string Word { get; set; }
public string ImageUrl { get; set; }
}
}

View File

@@ -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();
}
}

View 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);
}
}

View File

@@ -1,8 +0,0 @@
namespace NadekoBot.Modules.Games.Common.Hangman
{
public enum Phase
{
Active,
Ended,
}
}

View File

@@ -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;
}
}
}

View File

@@ -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,
}
}

View File

@@ -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);
}
}

View File

@@ -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>();

View File

@@ -14,6 +14,8 @@ using NadekoBot.Extensions;
using StackExchange.Redis;
using Discord;
using Discord.WebSocket;
using LinqToDB;
using LinqToDB.EntityFrameworkCore;
using NadekoBot.Common.Collections;
using NadekoBot.Common.Replacements;
using NadekoBot.Db;
@@ -342,19 +344,18 @@ namespace NadekoBot.Modules.Searches.Services
return Task.CompletedTask;
}
public int ClearAllStreams(ulong guildId)
public async Task<int> ClearAllStreams(ulong guildId)
{
// todo future clear streams
int count;
using (var uow = _db.GetDbContext())
{
var gc = uow.GuildConfigsForId(guildId, set => set.Include(x => x.FollowedStreams));
count = gc.FollowedStreams.Count;
gc.FollowedStreams.Clear();
uow.SaveChanges();
}
using var uow = _db.GetDbContext();
var gc = uow.GuildConfigsForId(guildId, set => set.Include(x => x.FollowedStreams));
uow.RemoveRange(gc.FollowedStreams);
return count;
foreach (var s in gc.FollowedStreams)
await PublishUnfollowStream(s);
uow.SaveChanges();
return gc.FollowedStreams.Count;
}
public async Task<FollowedStream> UnfollowStreamAsync(ulong guildId, int index)

View File

@@ -69,14 +69,14 @@ namespace NadekoBot.Modules.Searches
fs.Type));
}
// [NadekoCommand, Usage, Description, Aliases]
// [RequireContext(ContextType.Guild)]
// [UserPerm(GuildPerm.Administrator)]
// public async Task StreamsClear()
// {
// var count = _service.ClearAllStreams(ctx.Guild.Id);
// await ReplyErrorLocalizedAsync(strs.streams_cleared(count)));
// }
[NadekoCommand, Usage, Description, Aliases]
[RequireContext(ContextType.Guild)]
[UserPerm(GuildPerm.Administrator)]
public async Task StreamsClear()
{
var count = _service.ClearAllStreams(ctx.Guild.Id);
await ReplyConfirmLocalizedAsync(strs.streams_cleared);
}
[NadekoCommand, Aliases]
[RequireContext(ContextType.Guild)]

View File

@@ -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)
{

View File

@@ -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;
}

View File

@@ -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)

View File

@@ -19,7 +19,7 @@ namespace NadekoBot.Services
private readonly IBotCredentials _creds;
private readonly DateTime _started;
public const string BotVersion = "3.0.5";
public const string BotVersion = "3.0.7";
public string Author => "Kwoth#2452";
public string Library => "Discord.Net";

View File

@@ -532,6 +532,9 @@ streamadd:
streamremove:
- streamremove
- strm
streamsclear:
- streamsclear
- stclear
streamlist:
- streamlist
- stl

View File

@@ -1,5 +1,5 @@
# DO NOT CHANGE
version: 1
version: 2
# Currency settings
currency:
# What is the emoji/character which represents the currency
@@ -21,12 +21,12 @@ betRoll:
# This setting will describe which multiplier is used for when the roll is higher than the given number.
# Doesn't have to be ordered.
pairs:
- whenAbove: 99
multiplyBy: 10
- whenAbove: 90
multiplyBy: 4
- whenAbove: 66
multiplyBy: 2
- whenAbove: 99
multiplyBy: 10
- whenAbove: 90
multiplyBy: 4
- whenAbove: 66
multiplyBy: 2
# Automatic currency generation settings.
generation:
# when currency is generated, should it also have a random password
@@ -68,14 +68,14 @@ decay:
wheelOfFortune:
# Self-Explanatory. Has to have 8 values, otherwise the command won't work.
multipliers:
- 1.7
- 1.5
- 0.2
- 0.1
- 0.3
- 0.5
- 1.2
- 2.4
- 1.7
- 1.5
- 0.2
- 0.1
- 0.3
- 0.5
- 1.2
- 2.4
# Settings related to waifus
waifu:
# Minimum price a waifu can have
@@ -107,116 +107,133 @@ waifu:
# Default 0.95 (meaning 95%)
# Example: If a waifu is worth 1000, and she receives a gift worth 100, her new value will be 1095)
giftEffect: 0.95
# What percentage of the value of the gift will a waifu lose when she's gifted a gift marked as 'negative'.
# Default 0.5 (meaning 50%)
# Example: If a waifu is worth 1000, and she receives a negative gift worth 100, her new value will be 950)
negativeGiftEffect: 0.50
# List of items available for gifting.
# If negative is true, gift will instead reduce waifu value.
items:
- itemEmoji: "🥔"
price: 5
name: Potato
- itemEmoji: "🍪"
price: 10
name: Cookie
- itemEmoji: "🥖"
price: 20
name: Bread
- itemEmoji: "🍭"
price: 30
name: Lollipop
- itemEmoji: "🌹"
price: 50
name: Rose
- itemEmoji: "🍺"
price: 70
name: Beer
- itemEmoji: "🌮"
price: 85
name: Taco
- itemEmoji: "💌"
price: 100
name: LoveLetter
- itemEmoji: "🥛"
price: 125
name: Milk
- itemEmoji: "🍕"
price: 150
name: Pizza
- itemEmoji: "🍫"
price: 200
name: Chocolate
- itemEmoji: "🍦"
price: 250
name: Icecream
- itemEmoji: "🍣"
price: 300
name: Sushi
- itemEmoji: "🍚"
price: 400
name: Rice
- itemEmoji: "🍉"
price: 500
name: Watermelon
- itemEmoji: "🍱"
price: 600
name: Bento
- itemEmoji: "🎟"
price: 800
name: MovieTicket
- itemEmoji: "🍰"
price: 1000
name: Cake
- itemEmoji: "📔"
price: 1500
name: Book
- itemEmoji: "🐱"
price: 2000
name: Cat
- itemEmoji: "🐶"
price: 2001
name: Dog
- itemEmoji: "🐼"
price: 2500
name: Panda
- itemEmoji: "💄"
price: 3000
name: Lipstick
- itemEmoji: "👛"
price: 3500
name: Purse
- itemEmoji: "📱"
price: 4000
name: iPhone
- itemEmoji: "👗"
price: 4500
name: Dress
- itemEmoji: "💻"
price: 5000
name: Laptop
- itemEmoji: "🎻"
price: 7500
name: Violin
- itemEmoji: "🎹"
price: 8000
name: Piano
- itemEmoji: "🚗"
price: 9000
name: Car
- itemEmoji: "💍"
price: 10000
name: Ring
- itemEmoji: "🛳"
price: 12000
name: Ship
- itemEmoji: "🏠"
price: 15000
name: House
- itemEmoji: "🚁"
price: 20000
name: Helicopter
- itemEmoji: "🚀"
price: 30000
name: Spaceship
- itemEmoji: "🌕"
price: 50000
name: Moon
- itemEmoji: "🥔"
price: 5
name: Potato
- itemEmoji: "🍪"
price: 10
name: Cookie
- itemEmoji: "🥖"
price: 20
name: Bread
- itemEmoji: "🍭"
price: 30
name: Lollipop
- itemEmoji: "🌹"
price: 50
name: Rose
- itemEmoji: "🍺"
price: 70
name: Beer
- itemEmoji: "🌮"
price: 85
name: Taco
- itemEmoji: "💌"
price: 100
name: LoveLetter
- itemEmoji: "🥛"
price: 125
name: Milk
- itemEmoji: "🍕"
price: 150
name: Pizza
- itemEmoji: "🍫"
price: 200
name: Chocolate
- itemEmoji: "🍦"
price: 250
name: Icecream
- itemEmoji: "🍣"
price: 300
name: Sushi
- itemEmoji: "🍚"
price: 400
name: Rice
- itemEmoji: "🍉"
price: 500
name: Watermelon
- itemEmoji: "🍱"
price: 600
name: Bento
- itemEmoji: "🎟"
price: 800
name: MovieTicket
- itemEmoji: "🍰"
price: 1000
name: Cake
- itemEmoji: "📔"
price: 1500
name: Book
- itemEmoji: "🐱"
price: 2000
name: Cat
- itemEmoji: "🐶"
price: 2001
name: Dog
- itemEmoji: "🐼"
price: 2500
name: Panda
- itemEmoji: "💄"
price: 3000
name: Lipstick
- itemEmoji: "👛"
price: 3500
name: Purse
- itemEmoji: "📱"
price: 4000
name: iPhone
- itemEmoji: "👗"
price: 4500
name: Dress
- itemEmoji: "💻"
price: 5000
name: Laptop
- itemEmoji: "🎻"
price: 7500
name: Violin
- itemEmoji: "🎹"
price: 8000
name: Piano
- itemEmoji: "🚗"
price: 9000
name: Car
- itemEmoji: "💍"
price: 10000
name: Ring
- itemEmoji: "🛳"
price: 12000
name: Ship
- itemEmoji: "🏠"
price: 15000
name: House
- itemEmoji: "🚁"
price: 20000
name: Helicopter
- itemEmoji: "🚀"
price: 30000
name: Spaceship
- itemEmoji: "🌕"
price: 50000
name: Moon
- itemEmoji: "🥀"
price: 100
name: WiltedRose
negative: true
- itemEmoji: ✂️
price: 1000
name: Haircut
negative: true
- itemEmoji: "🧻"
price: 10000
name: ToiletPaper
negative: true
# Amount of currency selfhosters will get PER pledged dollar CENT.
# 1 = 100 currency per $. Used almost exclusively on public nadeko.
patreonCurrencyPerCent: 1

File diff suppressed because it is too large Load Diff

View 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

View 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

View 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

View 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

View 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

View File

@@ -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:
@@ -900,6 +902,10 @@ streamadd:
desc: "Notifies this channel when the stream on the specified URL goes online or offline. Offline notifications will only show if you enable `{0}streamoff`. Maximum 10 per server."
args:
- "twitch.tv/someguy"
streamsclear:
desc: "Removes all followed streams on this server."
args:
- ""
streamremove:
desc: "Stops following the stream on the specified index. (use `{0}stl` to see indexes)"
args:
@@ -1319,11 +1325,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"
@@ -1431,7 +1437,10 @@ waifutransfer:
args:
- "@ExWaifu @NewOwner"
waifugift:
desc: "Gift an item to someone. This will increase their waifu value by 50% of the gifted item's value if they are not your waifu, or 95% if they are. Provide no parameters to see a list of items that you can gift."
desc: -|
Gift an item to someone. This will increase their waifu value by a percentage of the gift's value.
Negative gifts will not show up in waifuinfo.
Provide no parameters to see a list of items that you can gift.
args:
- ""
- "Rose @Himesama"

View File

@@ -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",
@@ -503,6 +507,7 @@
"streamer_online": "Streamer {0} is online with {1} viewers.",
"streams_follow_title": "Streams you're following",
"streams_none": "You are not following any streams on this server.",
"streams_cleared": "All streams followed on this server have been removed.",
"stream_no": "No such stream.",
"stream_off_enabled": "Stream notifications will now show when a stream goes offline.",
"stream_off_disabled": "Stream notifications will no longer show when a stream goes offline.",