localization complete, or nearly complete if I missed something
This commit is contained in:
parent
466ec12de0
commit
22f961a093
@ -65,7 +65,6 @@ namespace NadekoBot.Modules.Games
|
||||
}
|
||||
|
||||
private readonly ITextChannel _channel;
|
||||
private readonly Logger _log;
|
||||
private readonly IGuildUser[] _users;
|
||||
private readonly int?[,] _state;
|
||||
private Phase _phase;
|
||||
@ -91,7 +90,6 @@ namespace NadekoBot.Modules.Games
|
||||
{ null, null, null },
|
||||
};
|
||||
|
||||
_log = LogManager.GetCurrentClassLogger();
|
||||
_phase = Phase.Starting;
|
||||
_moveLock = new SemaphoreSlim(1, 1);
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ namespace NadekoBot.Modules.Music.Classes
|
||||
//pwetty
|
||||
|
||||
public string PrettyProvider =>
|
||||
$"{(SongInfo.Provider ?? "No Provider")}";
|
||||
$"{(SongInfo.Provider ?? "???")}";
|
||||
|
||||
public string PrettyFullTime => PrettyCurrentTime + " / " + PrettyTotalTime;
|
||||
|
||||
|
@ -20,7 +20,7 @@ namespace NadekoBot.Modules.Music
|
||||
{
|
||||
[NadekoModule("Music", "!!")]
|
||||
[DontAutoLoad]
|
||||
public partial class Music : NadekoTopLevelModule
|
||||
public class Music : NadekoTopLevelModule
|
||||
{
|
||||
public static ConcurrentDictionary<ulong, MusicPlayer> MusicPlayers { get; } = new ConcurrentDictionary<ulong, MusicPlayer>();
|
||||
|
||||
@ -155,7 +155,14 @@ namespace NadekoBot.Modules.Music
|
||||
return;
|
||||
var val = musicPlayer.FairPlay = !musicPlayer.FairPlay;
|
||||
|
||||
await channel.SendConfirmAsync("Fair play " + (val ? "enabled" : "disabled") + ".").ConfigureAwait(false);
|
||||
if (val)
|
||||
{
|
||||
await ReplyConfirmLocalized("fp_enabled").ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
await ReplyConfirmLocalized("fp_disabled").ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
@ -184,34 +191,31 @@ namespace NadekoBot.Modules.Music
|
||||
[RequireContext(ContextType.Guild)]
|
||||
public async Task ListQueue(int page = 1)
|
||||
{
|
||||
|
||||
Song currentSong;
|
||||
MusicPlayer musicPlayer;
|
||||
if (!MusicPlayers.TryGetValue(Context.Guild.Id, out musicPlayer))
|
||||
if (!MusicPlayers.TryGetValue(Context.Guild.Id, out musicPlayer) ||
|
||||
(currentSong = musicPlayer?.CurrentSong) == null)
|
||||
{
|
||||
await Context.Channel.SendErrorAsync("🎵 No active music player.").ConfigureAwait(false);
|
||||
await ReplyErrorLocalized("no_music_player").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
if (page <= 0)
|
||||
return;
|
||||
|
||||
var currentSong = musicPlayer.CurrentSong;
|
||||
if (currentSong == null)
|
||||
{
|
||||
await Context.Channel.SendErrorAsync("🎵 No active music player.").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
try { await musicPlayer.UpdateSongDurationsAsync().ConfigureAwait(false); } catch { }
|
||||
|
||||
const int itemsPerPage = 10;
|
||||
|
||||
var total = musicPlayer.TotalPlaytime;
|
||||
var totalStr = total == TimeSpan.MaxValue ? "∞" : $"{(int)total.TotalHours}h {total.Minutes}m {total.Seconds}s";
|
||||
var totalStr = total == TimeSpan.MaxValue ? "∞" : GetText("time_format",
|
||||
(int) total.TotalHours,
|
||||
total.Minutes,
|
||||
total.Seconds);
|
||||
var maxPlaytime = musicPlayer.MaxPlaytimeSeconds;
|
||||
var lastPage = musicPlayer.Playlist.Count / itemsPerPage;
|
||||
Func<int, EmbedBuilder> printAction = (curPage) =>
|
||||
Func<int, EmbedBuilder> printAction = curPage =>
|
||||
{
|
||||
int startAt = itemsPerPage * (curPage - 1);
|
||||
var startAt = itemsPerPage * (curPage - 1);
|
||||
var number = 0 + startAt;
|
||||
var desc = string.Join("\n", musicPlayer.Playlist
|
||||
.Skip(startAt)
|
||||
@ -221,19 +225,22 @@ namespace NadekoBot.Modules.Music
|
||||
desc = $"`🔊` {currentSong.PrettyFullName}\n\n" + desc;
|
||||
|
||||
if (musicPlayer.RepeatSong)
|
||||
desc = "🔂 Repeating Current Song\n\n" + desc;
|
||||
desc = "🔂 " + GetText("repeating_cur_song") +"\n\n" + desc;
|
||||
else if (musicPlayer.RepeatPlaylist)
|
||||
desc = "🔁 Repeating Playlist\n\n" + desc;
|
||||
desc = "🔁 " + GetText("repeating_playlist")+"\n\n" + desc;
|
||||
|
||||
|
||||
|
||||
var embed = new EmbedBuilder()
|
||||
.WithAuthor(eab => eab.WithName($"Player Queue - Page {curPage}/{lastPage + 1}")
|
||||
.WithMusicIcon())
|
||||
.WithAuthor(eab => eab.WithName(GetText("player_queue", curPage, lastPage + 1))
|
||||
.WithMusicIcon())
|
||||
.WithDescription(desc)
|
||||
.WithFooter(ef => ef.WithText($"{musicPlayer.PrettyVolume} | {musicPlayer.Playlist.Count} " +
|
||||
$"{("tracks".SnPl(musicPlayer.Playlist.Count))} | {totalStr} | " +
|
||||
(musicPlayer.FairPlay ? "✔️fairplay" : "✖️fairplay") + $" | " + (maxPlaytime == 0 ? "unlimited" : $"{maxPlaytime}s limit")))
|
||||
$"{("tracks".SnPl(musicPlayer.Playlist.Count))} | {totalStr} | " +
|
||||
(musicPlayer.FairPlay
|
||||
? "✔️" + GetText("fairplay")
|
||||
: "✖️" + GetText("fairplay")) + " | " +
|
||||
(maxPlaytime == 0 ? "unlimited" : GetText("play_limit", maxPlaytime))))
|
||||
.WithOkColor();
|
||||
|
||||
return embed;
|
||||
@ -254,7 +261,7 @@ namespace NadekoBot.Modules.Music
|
||||
try { await musicPlayer.UpdateSongDurationsAsync().ConfigureAwait(false); } catch { }
|
||||
|
||||
var embed = new EmbedBuilder().WithOkColor()
|
||||
.WithAuthor(eab => eab.WithName("Now Playing").WithMusicIcon())
|
||||
.WithAuthor(eab => eab.WithName(GetText("now_playing")).WithMusicIcon())
|
||||
.WithDescription(currentSong.PrettyName)
|
||||
.WithThumbnailUrl(currentSong.Thumbnail)
|
||||
.WithFooter(ef => ef.WithText(musicPlayer.PrettyVolume + " | " + currentSong.PrettyFullTime + $" | {currentSong.PrettyProvider} | {currentSong.QueuerName}"));
|
||||
@ -271,21 +278,22 @@ namespace NadekoBot.Modules.Music
|
||||
return;
|
||||
if (((IGuildUser)Context.User).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
||||
return;
|
||||
if (val < 0)
|
||||
if (val < 0 || val > 100)
|
||||
{
|
||||
await ReplyErrorLocalized("volume_input_invalid").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
var volume = musicPlayer.SetVolume(val);
|
||||
await Context.Channel.SendConfirmAsync($"🎵 Volume set to {volume}%").ConfigureAwait(false);
|
||||
await ReplyConfirmLocalized("volume_set", volume).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
public async Task Defvol([Remainder] int val)
|
||||
{
|
||||
|
||||
|
||||
if (val < 0 || val > 100)
|
||||
{
|
||||
await Context.Channel.SendErrorAsync("Volume number invalid. Must be between 0 and 100").ConfigureAwait(false);
|
||||
await ReplyErrorLocalized("volume_input_invalid").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
using (var uow = DbHandler.UnitOfWork())
|
||||
@ -293,7 +301,7 @@ namespace NadekoBot.Modules.Music
|
||||
uow.GuildConfigs.For(Context.Guild.Id, set => set).DefaultMusicVolume = val / 100.0f;
|
||||
uow.Complete();
|
||||
}
|
||||
await Context.Channel.SendConfirmAsync($"🎵 Default volume set to {val}%").ConfigureAwait(false);
|
||||
await ReplyConfirmLocalized("defvol_set").ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
@ -307,13 +315,10 @@ namespace NadekoBot.Modules.Music
|
||||
if (((IGuildUser)Context.User).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
||||
return;
|
||||
if (musicPlayer.Playlist.Count < 2)
|
||||
{
|
||||
await Context.Channel.SendErrorAsync("💢 Not enough songs in order to perform the shuffle.").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
musicPlayer.Shuffle();
|
||||
await Context.Channel.SendConfirmAsync("🎵 Songs shuffled.").ConfigureAwait(false);
|
||||
await ReplyConfirmLocalized("songs_shuffled").ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
@ -326,29 +331,31 @@ namespace NadekoBot.Modules.Music
|
||||
return;
|
||||
if (((IGuildUser)Context.User).VoiceChannel?.Guild != Context.Guild)
|
||||
{
|
||||
await Context.Channel.SendErrorAsync($"💢 You need to be in a **voice channel** on this server.").ConfigureAwait(false);
|
||||
await ReplyErrorLocalized("must_be_in_voice").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
var plId = (await NadekoBot.Google.GetPlaylistIdsByKeywordsAsync(arg).ConfigureAwait(false)).FirstOrDefault();
|
||||
if (plId == null)
|
||||
{
|
||||
await Context.Channel.SendErrorAsync("No search results for that query.");
|
||||
await ReplyErrorLocalized("no_search_results").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
var ids = await NadekoBot.Google.GetPlaylistTracksAsync(plId, 500).ConfigureAwait(false);
|
||||
if (!ids.Any())
|
||||
{
|
||||
await Context.Channel.SendErrorAsync($"🎵 Failed to find any songs.").ConfigureAwait(false);
|
||||
await ReplyErrorLocalized("no_search_results").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
var count = ids.Count();
|
||||
|
||||
var msg = await Context.Channel.SendMessageAsync($"🎵 Attempting to queue **{count}** songs".SnPl(count) + "...").ConfigureAwait(false);
|
||||
var msg = await Context.Channel.SendMessageAsync(GetText("attempting_to_queue",
|
||||
Format.Bold(count.ToString())))
|
||||
.ConfigureAwait(false);
|
||||
|
||||
var cancelSource = new CancellationTokenSource();
|
||||
|
||||
var gusr = (IGuildUser)Context.User;
|
||||
|
||||
//todo use grouping
|
||||
while (ids.Any() && !cancelSource.IsCancellationRequested)
|
||||
{
|
||||
var tasks = Task.WhenAll(ids.Take(5).Select(async id =>
|
||||
@ -367,7 +374,7 @@ namespace NadekoBot.Modules.Music
|
||||
ids = ids.Skip(5);
|
||||
}
|
||||
|
||||
await msg.ModifyAsync(m => m.Content = "✅ Playlist queue complete.").ConfigureAwait(false);
|
||||
await msg.ModifyAsync(m => m.Content = GetText("playlist_queue_complete")).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
@ -393,7 +400,7 @@ namespace NadekoBot.Modules.Music
|
||||
{
|
||||
try
|
||||
{
|
||||
mp.AddSong(new Song(new Classes.SongInfo
|
||||
mp.AddSong(new Song(new SongInfo
|
||||
{
|
||||
Title = svideo.FullName,
|
||||
Provider = "SoundCloud",
|
||||
@ -435,20 +442,20 @@ namespace NadekoBot.Modules.Music
|
||||
// ignored
|
||||
}
|
||||
}
|
||||
await Context.Channel.SendConfirmAsync("🎵 Directory queue complete.").ConfigureAwait(false);
|
||||
await ReplyConfirmLocalized("dir_queue_complete").ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
public async Task Radio(string radio_link)
|
||||
public async Task Radio(string radioLink)
|
||||
{
|
||||
|
||||
if (((IGuildUser)Context.User).VoiceChannel?.Guild != Context.Guild)
|
||||
{
|
||||
await Context.Channel.SendErrorAsync("💢 You need to be in a voice channel on this server.\n If you are already in a voice (ITextChannel)Context.Channel, try rejoining it.").ConfigureAwait(false);
|
||||
await ReplyErrorLocalized("must_be_in_voice").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
await QueueSong(((IGuildUser)Context.User), (ITextChannel)Context.Channel, ((IGuildUser)Context.User).VoiceChannel, radio_link, musicType: MusicType.Radio).ConfigureAwait(false);
|
||||
await QueueSong(((IGuildUser)Context.User), (ITextChannel)Context.Channel, ((IGuildUser)Context.User).VoiceChannel, radioLink, musicType: MusicType.Radio).ConfigureAwait(false);
|
||||
if ((await Context.Guild.GetCurrentUserAsync()).GetPermissions((IGuildChannel)Context.Channel).ManageMessages)
|
||||
{
|
||||
Context.Message.DeleteAfter(10);
|
||||
@ -505,8 +512,7 @@ namespace NadekoBot.Modules.Music
|
||||
MusicPlayer musicPlayer;
|
||||
if (!MusicPlayers.TryGetValue(Context.Guild.Id, out musicPlayer)) return;
|
||||
musicPlayer.ClearQueue();
|
||||
await Context.Channel.SendConfirmAsync($"🎵 Queue cleared!").ConfigureAwait(false);
|
||||
return;
|
||||
await ReplyConfirmLocalized("queue_cleared").ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
@ -532,7 +538,7 @@ namespace NadekoBot.Modules.Music
|
||||
!int.TryParse(fromtoArr[1], out n2) || n1 < 1 || n2 < 1 || n1 == n2 ||
|
||||
n1 > playlist.Count || n2 > playlist.Count)
|
||||
{
|
||||
await Context.Channel.SendErrorAsync("Invalid input.").ConfigureAwait(false);
|
||||
await ReplyConfirmLocalized("invalid_input").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -544,9 +550,9 @@ namespace NadekoBot.Modules.Music
|
||||
var embed = new EmbedBuilder()
|
||||
.WithTitle($"{s.SongInfo.Title.TrimTo(70)}")
|
||||
.WithUrl(s.SongUrl)
|
||||
.WithAuthor(eab => eab.WithName("Song Moved").WithIconUrl("https://cdn.discordapp.com/attachments/155726317222887425/258605269972549642/music1.png"))
|
||||
.AddField(fb => fb.WithName("**From Position**").WithValue($"#{n1}").WithIsInline(true))
|
||||
.AddField(fb => fb.WithName("**To Position**").WithValue($"#{n2}").WithIsInline(true))
|
||||
.WithAuthor(eab => eab.WithName(GetText("song_moved")).WithIconUrl("https://cdn.discordapp.com/attachments/155726317222887425/258605269972549642/music1.png"))
|
||||
.AddField(fb => fb.WithName(GetText("from_position")).WithValue($"#{n1}").WithIsInline(true))
|
||||
.AddField(fb => fb.WithName(GetText("to_position")).WithValue($"#{n2}").WithIsInline(true))
|
||||
.WithColor(NadekoBot.OkColor);
|
||||
await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||
|
||||
@ -564,7 +570,11 @@ namespace NadekoBot.Modules.Music
|
||||
return;
|
||||
|
||||
musicPlayer.MaxQueueSize = size;
|
||||
await Context.Channel.SendConfirmAsync($"🎵 Max queue set to {(size == 0 ? ("unlimited") : size + " tracks")}.");
|
||||
|
||||
if(size == 0)
|
||||
await ReplyConfirmLocalized("max_queue_unlimited").ConfigureAwait(false);
|
||||
else
|
||||
await ReplyConfirmLocalized("max_queue_x", size).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
@ -580,9 +590,9 @@ namespace NadekoBot.Modules.Music
|
||||
return;
|
||||
musicPlayer.MaxPlaytimeSeconds = seconds;
|
||||
if (seconds == 0)
|
||||
await channel.SendConfirmAsync($"🎵 Max playtime has no limit now.");
|
||||
await ReplyConfirmLocalized("max_playtime_none").ConfigureAwait(false);
|
||||
else
|
||||
await channel.SendConfirmAsync($"🎵 Max playtime set to {seconds} seconds.");
|
||||
await ReplyConfirmLocalized("max_playtime_set").ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
@ -601,11 +611,11 @@ namespace NadekoBot.Modules.Music
|
||||
if (currentValue)
|
||||
await Context.Channel.EmbedAsync(new EmbedBuilder()
|
||||
.WithOkColor()
|
||||
.WithAuthor(eab => eab.WithMusicIcon().WithName("🔂 Repeating track"))
|
||||
.WithAuthor(eab => eab.WithMusicIcon().WithName("🔂 " + GetText("repeating_track")))
|
||||
.WithDescription(currentSong.PrettyName)
|
||||
.WithFooter(ef => ef.WithText(currentSong.PrettyInfo))).ConfigureAwait(false);
|
||||
else
|
||||
await Context.Channel.SendConfirmAsync($"🔂 Current track repeat stopped.")
|
||||
await Context.Channel.SendConfirmAsync("🔂 " + GetText("repeating_track_stopped"))
|
||||
.ConfigureAwait(false);
|
||||
}
|
||||
|
||||
@ -618,7 +628,10 @@ namespace NadekoBot.Modules.Music
|
||||
if (!MusicPlayers.TryGetValue(Context.Guild.Id, out musicPlayer))
|
||||
return;
|
||||
var currentValue = musicPlayer.ToggleRepeatPlaylist();
|
||||
await Context.Channel.SendConfirmAsync($"🔁 Repeat playlist {(currentValue ? "**enabled**." : "**disabled**.")}").ConfigureAwait(false);
|
||||
if(currentValue)
|
||||
await ReplyConfirmLocalized("rpl_enabled").ConfigureAwait(false);
|
||||
else
|
||||
await ReplyConfirmLocalized("rpl_disabled").ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
@ -655,7 +668,10 @@ namespace NadekoBot.Modules.Music
|
||||
await uow.CompleteAsync().ConfigureAwait(false);
|
||||
}
|
||||
|
||||
await Context.Channel.SendConfirmAsync(($"🎵 Saved playlist as **{name}**, ID: {playlist.Id}.")).ConfigureAwait(false);
|
||||
await Context.Channel.EmbedAsync(new EmbedBuilder().WithOkColor()
|
||||
.WithTitle(GetText("playlist_saved"))
|
||||
.AddField(efb => efb.WithName(GetText("name")).WithValue(name))
|
||||
.AddField(efb => efb.WithName(GetText("id")).WithValue(playlist.Id.ToString())));
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
@ -670,11 +686,11 @@ namespace NadekoBot.Modules.Music
|
||||
|
||||
if (mpl == null)
|
||||
{
|
||||
await Context.Channel.SendErrorAsync("Can't find playlist with that ID.").ConfigureAwait(false);
|
||||
await ReplyErrorLocalized("playlist_id_not_found").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
IUserMessage msg = null;
|
||||
try { msg = await Context.Channel.SendMessageAsync($"🎶 Attempting to load **{mpl.Songs.Count}** songs...").ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); }
|
||||
try { msg = await ReplyConfirmLocalized("attempting_to_queue", Format.Bold(mpl.Songs.Count.ToString())).ConfigureAwait(false); } catch (Exception ex) { _log.Warn(ex); }
|
||||
foreach (var item in mpl.Songs)
|
||||
{
|
||||
var usr = (IGuildUser)Context.User;
|
||||
@ -686,15 +702,13 @@ namespace NadekoBot.Modules.Music
|
||||
catch { break; }
|
||||
}
|
||||
if (msg != null)
|
||||
await msg.ModifyAsync(m => m.Content = $"✅ Done loading playlist **{mpl.Name}**.").ConfigureAwait(false);
|
||||
await msg.ModifyAsync(m => m.Content = GetText("playlist_queue_complete")).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
public async Task Playlists([Remainder] int num = 1)
|
||||
{
|
||||
|
||||
|
||||
if (num <= 0)
|
||||
return;
|
||||
|
||||
@ -706,8 +720,9 @@ namespace NadekoBot.Modules.Music
|
||||
}
|
||||
|
||||
var embed = new EmbedBuilder()
|
||||
.WithAuthor(eab => eab.WithName($"Page {num} of Saved Playlists").WithMusicIcon())
|
||||
.WithDescription(string.Join("\n", playlists.Select(r => $"`#{r.Id}` - **{r.Name}** by *{r.Author}* ({r.Songs.Count} songs)")))
|
||||
.WithAuthor(eab => eab.WithName(GetText("playlists_page", num)).WithMusicIcon())
|
||||
.WithDescription(string.Join("\n", playlists.Select(r =>
|
||||
GetText("playlists", "#" + r.Id, r.Name, r.Author, r.Songs.Count))))
|
||||
.WithOkColor();
|
||||
await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||
|
||||
@ -717,13 +732,12 @@ namespace NadekoBot.Modules.Music
|
||||
[RequireContext(ContextType.Guild)]
|
||||
public async Task DeletePlaylist([Remainder] int id)
|
||||
{
|
||||
bool success = false;
|
||||
MusicPlaylist pl = null;
|
||||
var success = false;
|
||||
try
|
||||
{
|
||||
using (var uow = DbHandler.UnitOfWork())
|
||||
{
|
||||
pl = uow.MusicPlaylists.Get(id);
|
||||
var pl = uow.MusicPlaylists.Get(id);
|
||||
|
||||
if (pl != null)
|
||||
{
|
||||
@ -733,15 +747,13 @@ namespace NadekoBot.Modules.Music
|
||||
await uow.CompleteAsync().ConfigureAwait(false);
|
||||
success = true;
|
||||
}
|
||||
else
|
||||
success = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!success)
|
||||
await Context.Channel.SendErrorAsync("Failed to delete that playlist. It either doesn't exist, or you are not its author.").ConfigureAwait(false);
|
||||
await ReplyErrorLocalized("playlist_delete_fail").ConfigureAwait(false);
|
||||
else
|
||||
await Context.Channel.SendConfirmAsync("🗑 Playlist successfully **deleted**.").ConfigureAwait(false);
|
||||
await ReplyConfirmLocalized("playlist_deleted").ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -781,7 +793,7 @@ namespace NadekoBot.Modules.Music
|
||||
if (seconds.Length == 1)
|
||||
seconds = "0" + seconds;
|
||||
|
||||
await Context.Channel.SendConfirmAsync($"Skipped to `{minutes}:{seconds}`").ConfigureAwait(false);
|
||||
await ReplyConfirmLocalized("skipped_to", minutes, seconds).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
@ -793,9 +805,9 @@ namespace NadekoBot.Modules.Music
|
||||
return;
|
||||
|
||||
if (!musicPlayer.ToggleAutoplay())
|
||||
await Context.Channel.SendConfirmAsync("❌ Autoplay disabled.").ConfigureAwait(false);
|
||||
await ReplyConfirmLocalized("autoplay_disabled").ConfigureAwait(false);
|
||||
else
|
||||
await Context.Channel.SendConfirmAsync("✅ Autoplay enabled.").ConfigureAwait(false);
|
||||
await ReplyConfirmLocalized("autoplay_enabled").ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
@ -806,29 +818,29 @@ namespace NadekoBot.Modules.Music
|
||||
MusicPlayer musicPlayer;
|
||||
if (!MusicPlayers.TryGetValue(Context.Guild.Id, out musicPlayer))
|
||||
{
|
||||
await Context.Channel.SendErrorAsync("Music must be playing before you set an ouput channel.").ConfigureAwait(false);
|
||||
await ReplyErrorLocalized("player_none").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
musicPlayer.OutputTextChannel = (ITextChannel)Context.Channel;
|
||||
|
||||
await Context.Channel.SendConfirmAsync("I will now output playing, finished, paused and removed songs in this channel.").ConfigureAwait(false);
|
||||
await ReplyConfirmLocalized("set_music_channel").ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public static async Task QueueSong(IGuildUser queuer, ITextChannel textCh, IVoiceChannel voiceCh, string query, bool silent = false, MusicType musicType = MusicType.Normal)
|
||||
public async Task QueueSong(IGuildUser queuer, ITextChannel textCh, IVoiceChannel voiceCh, string query, bool silent = false, MusicType musicType = MusicType.Normal)
|
||||
{
|
||||
if (voiceCh == null || voiceCh.Guild != textCh.Guild)
|
||||
{
|
||||
if (!silent)
|
||||
await textCh.SendErrorAsync($"💢 You need to be in a voice channel on this server.").ConfigureAwait(false);
|
||||
await textCh.SendErrorAsync(GetText("must_be_in_voice")).ConfigureAwait(false);
|
||||
throw new ArgumentNullException(nameof(voiceCh));
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(query) || query.Length < 3)
|
||||
throw new ArgumentException("💢 Invalid query for queue song.", nameof(query));
|
||||
throw new ArgumentException("Invalid song query.", nameof(query));
|
||||
|
||||
var musicPlayer = MusicPlayers.GetOrAdd(textCh.Guild.Id, server =>
|
||||
{
|
||||
float vol = 1;// SpecificConfigurations.Default.Of(server.Id).DefaultMusicVolume;
|
||||
float vol;// SpecificConfigurations.Default.Of(server.Id).DefaultMusicVolume;
|
||||
using (var uow = DbHandler.UnitOfWork())
|
||||
{
|
||||
vol = uow.GuildConfigs.For(textCh.Guild.Id, set => set).DefaultMusicVolume;
|
||||
@ -845,7 +857,7 @@ namespace NadekoBot.Modules.Music
|
||||
try
|
||||
{
|
||||
lastFinishedMessage = await mp.OutputTextChannel.EmbedAsync(new EmbedBuilder().WithOkColor()
|
||||
.WithAuthor(eab => eab.WithName("Finished Song").WithMusicIcon())
|
||||
.WithAuthor(eab => eab.WithName(GetText("finished_song")).WithMusicIcon())
|
||||
.WithDescription(song.PrettyName)
|
||||
.WithFooter(ef => ef.WithText(song.PrettyInfo)))
|
||||
.ConfigureAwait(false);
|
||||
@ -866,7 +878,10 @@ namespace NadekoBot.Modules.Music
|
||||
true).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
};
|
||||
|
||||
mp.OnStarted += async (player, song) =>
|
||||
@ -876,7 +891,7 @@ namespace NadekoBot.Modules.Music
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
var sender = player as MusicPlayer;
|
||||
var sender = player;
|
||||
if (sender == null)
|
||||
return;
|
||||
try
|
||||
@ -884,12 +899,15 @@ namespace NadekoBot.Modules.Music
|
||||
playingMessage?.DeleteAfter(0);
|
||||
|
||||
playingMessage = await mp.OutputTextChannel.EmbedAsync(new EmbedBuilder().WithOkColor()
|
||||
.WithAuthor(eab => eab.WithName("Playing Song").WithMusicIcon())
|
||||
.WithAuthor(eab => eab.WithName(GetText("playing_song")).WithMusicIcon())
|
||||
.WithDescription(song.PrettyName)
|
||||
.WithFooter(ef => ef.WithText(song.PrettyInfo)))
|
||||
.ConfigureAwait(false);
|
||||
}
|
||||
catch { }
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
};
|
||||
mp.OnPauseChanged += async (paused) =>
|
||||
{
|
||||
@ -897,13 +915,16 @@ namespace NadekoBot.Modules.Music
|
||||
{
|
||||
IUserMessage msg;
|
||||
if (paused)
|
||||
msg = await mp.OutputTextChannel.SendConfirmAsync("🎵 Music playback **paused**.").ConfigureAwait(false);
|
||||
msg = await mp.OutputTextChannel.SendConfirmAsync(GetText("music_paused")).ConfigureAwait(false);
|
||||
else
|
||||
msg = await mp.OutputTextChannel.SendConfirmAsync("🎵 Music playback **resumed**.").ConfigureAwait(false);
|
||||
msg = await mp.OutputTextChannel.SendConfirmAsync(GetText("music_resumed")).ConfigureAwait(false);
|
||||
|
||||
msg?.DeleteAfter(10);
|
||||
}
|
||||
catch { }
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
};
|
||||
|
||||
mp.SongRemoved += async (song, index) =>
|
||||
@ -911,7 +932,7 @@ namespace NadekoBot.Modules.Music
|
||||
try
|
||||
{
|
||||
var embed = new EmbedBuilder()
|
||||
.WithAuthor(eab => eab.WithName("Removed song #" + (index + 1)).WithMusicIcon())
|
||||
.WithAuthor(eab => eab.WithName(GetText("removed_song") + " #" + (index + 1)).WithMusicIcon())
|
||||
.WithDescription(song.PrettyName)
|
||||
.WithFooter(ef => ef.WithText(song.PrettyInfo))
|
||||
.WithErrorColor();
|
||||
@ -939,7 +960,14 @@ namespace NadekoBot.Modules.Music
|
||||
}
|
||||
catch (PlaylistFullException)
|
||||
{
|
||||
try { await textCh.SendConfirmAsync($"🎵 Queue is full at **{musicPlayer.MaxQueueSize}/{musicPlayer.MaxQueueSize}**."); } catch { }
|
||||
try
|
||||
{
|
||||
await textCh.SendConfirmAsync(GetText("queue_full", musicPlayer.MaxQueueSize));
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
throw;
|
||||
}
|
||||
if (!silent)
|
||||
@ -948,8 +976,8 @@ namespace NadekoBot.Modules.Music
|
||||
{
|
||||
//var queuedMessage = await textCh.SendConfirmAsync($"🎵 Queued **{resolvedSong.SongInfo.Title}** at `#{musicPlayer.Playlist.Count + 1}`").ConfigureAwait(false);
|
||||
var queuedMessage = await textCh.EmbedAsync(new EmbedBuilder().WithOkColor()
|
||||
.WithAuthor(eab => eab.WithName("Queued Song #" + (musicPlayer.Playlist.Count + 1)).WithMusicIcon())
|
||||
.WithDescription($"{resolvedSong.PrettyName}\nQueue ")
|
||||
.WithAuthor(eab => eab.WithName(GetText("queued_song") + " #" + (musicPlayer.Playlist.Count + 1)).WithMusicIcon())
|
||||
.WithDescription($"{resolvedSong.PrettyName}\n{GetText("queue")} ")
|
||||
.WithThumbnailUrl(resolvedSong.Thumbnail)
|
||||
.WithFooter(ef => ef.WithText(resolvedSong.PrettyProvider)))
|
||||
.ConfigureAwait(false);
|
||||
|
477
src/NadekoBot/Resources/ResponseStrings.Designer.cs
generated
477
src/NadekoBot/Resources/ResponseStrings.Designer.cs
generated
@ -3388,6 +3388,483 @@ namespace NadekoBot.Resources {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Attempting to queue {0} songs....
|
||||
/// </summary>
|
||||
public static string music_attempting_to_queue {
|
||||
get {
|
||||
return ResourceManager.GetString("music_attempting_to_queue", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Autoplay disabled..
|
||||
/// </summary>
|
||||
public static string music_autoplay_disabled {
|
||||
get {
|
||||
return ResourceManager.GetString("music_autoplay_disabled", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Autoplay enabled..
|
||||
/// </summary>
|
||||
public static string music_autoplay_enabled {
|
||||
get {
|
||||
return ResourceManager.GetString("music_autoplay_enabled", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Default volume set to {0}%.
|
||||
/// </summary>
|
||||
public static string music_defvol_set {
|
||||
get {
|
||||
return ResourceManager.GetString("music_defvol_set", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Directory queue complete..
|
||||
/// </summary>
|
||||
public static string music_dir_queue_complete {
|
||||
get {
|
||||
return ResourceManager.GetString("music_dir_queue_complete", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Finished Song.
|
||||
/// </summary>
|
||||
public static string music_finished_song {
|
||||
get {
|
||||
return ResourceManager.GetString("music_finished_song", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Fair play disabled..
|
||||
/// </summary>
|
||||
public static string music_fp_disabled {
|
||||
get {
|
||||
return ResourceManager.GetString("music_fp_disabled", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Fair play enabled..
|
||||
/// </summary>
|
||||
public static string music_fp_enabled {
|
||||
get {
|
||||
return ResourceManager.GetString("music_fp_enabled", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to From position.
|
||||
/// </summary>
|
||||
public static string music_from_position {
|
||||
get {
|
||||
return ResourceManager.GetString("music_from_position", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Id.
|
||||
/// </summary>
|
||||
public static string music_id {
|
||||
get {
|
||||
return ResourceManager.GetString("music_id", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Invalid input..
|
||||
/// </summary>
|
||||
public static string music_invalid_input {
|
||||
get {
|
||||
return ResourceManager.GetString("music_invalid_input", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Max playtime has no limit now..
|
||||
/// </summary>
|
||||
public static string music_max_playtime_none {
|
||||
get {
|
||||
return ResourceManager.GetString("music_max_playtime_none", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Max playtime set to {0} second(s)..
|
||||
/// </summary>
|
||||
public static string music_max_playtime_set {
|
||||
get {
|
||||
return ResourceManager.GetString("music_max_playtime_set", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Max music queue size set to unlimited..
|
||||
/// </summary>
|
||||
public static string music_max_queue_unlimited {
|
||||
get {
|
||||
return ResourceManager.GetString("music_max_queue_unlimited", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Max music queue size set to {0} track(s)..
|
||||
/// </summary>
|
||||
public static string music_max_queue_x {
|
||||
get {
|
||||
return ResourceManager.GetString("music_max_queue_x", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to You need to be in the voice channel on this server..
|
||||
/// </summary>
|
||||
public static string music_must_be_in_voice {
|
||||
get {
|
||||
return ResourceManager.GetString("music_must_be_in_voice", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Name.
|
||||
/// </summary>
|
||||
public static string music_name {
|
||||
get {
|
||||
return ResourceManager.GetString("music_name", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to No active music player..
|
||||
/// </summary>
|
||||
public static string music_no_player {
|
||||
get {
|
||||
return ResourceManager.GetString("music_no_player", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to No search results..
|
||||
/// </summary>
|
||||
public static string music_no_search_results {
|
||||
get {
|
||||
return ResourceManager.GetString("music_no_search_results", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Now Playing.
|
||||
/// </summary>
|
||||
public static string music_now_playing {
|
||||
get {
|
||||
return ResourceManager.GetString("music_now_playing", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Music playback paused..
|
||||
/// </summary>
|
||||
public static string music_paused {
|
||||
get {
|
||||
return ResourceManager.GetString("music_paused", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to {0}s limit.
|
||||
/// </summary>
|
||||
public static string music_play_limit {
|
||||
get {
|
||||
return ResourceManager.GetString("music_play_limit", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to No music player active..
|
||||
/// </summary>
|
||||
public static string music_player_none {
|
||||
get {
|
||||
return ResourceManager.GetString("music_player_none", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Player Queue - Page {0}/{1}.
|
||||
/// </summary>
|
||||
public static string music_player_queue {
|
||||
get {
|
||||
return ResourceManager.GetString("music_player_queue", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Playing Song.
|
||||
/// </summary>
|
||||
public static string music_playing_song {
|
||||
get {
|
||||
return ResourceManager.GetString("music_playing_song", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Failed to delete that playlist. It either doesn't exist, or you are not its author..
|
||||
/// </summary>
|
||||
public static string music_playlist_delete_fail {
|
||||
get {
|
||||
return ResourceManager.GetString("music_playlist_delete_fail", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Playlist deleted..
|
||||
/// </summary>
|
||||
public static string music_playlist_deleted {
|
||||
get {
|
||||
return ResourceManager.GetString("music_playlist_deleted", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Playlist with that ID doesn't exist..
|
||||
/// </summary>
|
||||
public static string music_playlist_id_not_found {
|
||||
get {
|
||||
return ResourceManager.GetString("music_playlist_id_not_found", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Playlist queue complete..
|
||||
/// </summary>
|
||||
public static string music_playlist_queue_complete {
|
||||
get {
|
||||
return ResourceManager.GetString("music_playlist_queue_complete", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Playlist Saved.
|
||||
/// </summary>
|
||||
public static string music_playlist_saved {
|
||||
get {
|
||||
return ResourceManager.GetString("music_playlist_saved", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to `#{0}` - **{1}** by *{2}* ({3} songs).
|
||||
/// </summary>
|
||||
public static string music_playlists {
|
||||
get {
|
||||
return ResourceManager.GetString("music_playlists", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Page {0} of Saved Playlists.
|
||||
/// </summary>
|
||||
public static string music_playlists_page {
|
||||
get {
|
||||
return ResourceManager.GetString("music_playlists_page", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Queue.
|
||||
/// </summary>
|
||||
public static string music_queue {
|
||||
get {
|
||||
return ResourceManager.GetString("music_queue", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Music queue cleared..
|
||||
/// </summary>
|
||||
public static string music_queue_cleared {
|
||||
get {
|
||||
return ResourceManager.GetString("music_queue_cleared", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Queue is full at {0}/{0}..
|
||||
/// </summary>
|
||||
public static string music_queue_full {
|
||||
get {
|
||||
return ResourceManager.GetString("music_queue_full", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Queued Song.
|
||||
/// </summary>
|
||||
public static string music_queued_song {
|
||||
get {
|
||||
return ResourceManager.GetString("music_queued_song", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Removed song.
|
||||
/// </summary>
|
||||
public static string music_removed_song {
|
||||
get {
|
||||
return ResourceManager.GetString("music_removed_song", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Repeating Current Song.
|
||||
/// </summary>
|
||||
public static string music_repeating_cur_song {
|
||||
get {
|
||||
return ResourceManager.GetString("music_repeating_cur_song", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Repeating Playlist.
|
||||
/// </summary>
|
||||
public static string music_repeating_playlist {
|
||||
get {
|
||||
return ResourceManager.GetString("music_repeating_playlist", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Repeating Track.
|
||||
/// </summary>
|
||||
public static string music_repeating_track {
|
||||
get {
|
||||
return ResourceManager.GetString("music_repeating_track", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Current track repeat stopped..
|
||||
/// </summary>
|
||||
public static string music_repeating_track_stopped {
|
||||
get {
|
||||
return ResourceManager.GetString("music_repeating_track_stopped", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Music playback resumed..
|
||||
/// </summary>
|
||||
public static string music_resumed {
|
||||
get {
|
||||
return ResourceManager.GetString("music_resumed", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Repeat playlist disabled..
|
||||
/// </summary>
|
||||
public static string music_rpl_disabled {
|
||||
get {
|
||||
return ResourceManager.GetString("music_rpl_disabled", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Repeat playlist enabled..
|
||||
/// </summary>
|
||||
public static string music_rpl_enabled {
|
||||
get {
|
||||
return ResourceManager.GetString("music_rpl_enabled", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to I will now output playing, finished, paused and removed songs in this channel..
|
||||
/// </summary>
|
||||
public static string music_set_music_channel {
|
||||
get {
|
||||
return ResourceManager.GetString("music_set_music_channel", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Skipped to `{0}:{1}`.
|
||||
/// </summary>
|
||||
public static string music_skipped_to {
|
||||
get {
|
||||
return ResourceManager.GetString("music_skipped_to", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Song Moved.
|
||||
/// </summary>
|
||||
public static string music_song_moved {
|
||||
get {
|
||||
return ResourceManager.GetString("music_song_moved", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Songs shuffled..
|
||||
/// </summary>
|
||||
public static string music_songs_shuffled {
|
||||
get {
|
||||
return ResourceManager.GetString("music_songs_shuffled", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to {0}h {1}m {2}s.
|
||||
/// </summary>
|
||||
public static string music_time_format {
|
||||
get {
|
||||
return ResourceManager.GetString("music_time_format", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to To position.
|
||||
/// </summary>
|
||||
public static string music_to_position {
|
||||
get {
|
||||
return ResourceManager.GetString("music_to_position", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to unlimited.
|
||||
/// </summary>
|
||||
public static string music_unlimited {
|
||||
get {
|
||||
return ResourceManager.GetString("music_unlimited", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Volume must be between 0 and 100.
|
||||
/// </summary>
|
||||
public static string music_volume_input_invalid {
|
||||
get {
|
||||
return ResourceManager.GetString("music_volume_input_invalid", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Volume set to {0}%.
|
||||
/// </summary>
|
||||
public static string music_volume_set {
|
||||
get {
|
||||
return ResourceManager.GetString("music_volume_set", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Autohentai started. Reposting every {0}s with one of the following tags:
|
||||
///{1}.
|
||||
|
@ -1332,6 +1332,166 @@ Don't forget to leave your discord name or id in the message.
|
||||
<data name="games_vs" xml:space="preserve">
|
||||
<value>{0} vs {1}</value>
|
||||
</data>
|
||||
<data name="music_attempting_to_queue" xml:space="preserve">
|
||||
<value>Attempting to queue {0} songs...</value>
|
||||
</data>
|
||||
<data name="music_autoplay_disabled" xml:space="preserve">
|
||||
<value>Autoplay disabled.</value>
|
||||
</data>
|
||||
<data name="music_autoplay_enabled" xml:space="preserve">
|
||||
<value>Autoplay enabled.</value>
|
||||
</data>
|
||||
<data name="music_defvol_set" xml:space="preserve">
|
||||
<value>Default volume set to {0}%</value>
|
||||
</data>
|
||||
<data name="music_dir_queue_complete" xml:space="preserve">
|
||||
<value>Directory queue complete.</value>
|
||||
</data>
|
||||
<data name="music_finished_song" xml:space="preserve">
|
||||
<value>Finished Song</value>
|
||||
</data>
|
||||
<data name="music_fp_disabled" xml:space="preserve">
|
||||
<value>Fair play disabled.</value>
|
||||
</data>
|
||||
<data name="music_fp_enabled" xml:space="preserve">
|
||||
<value>Fair play enabled.</value>
|
||||
</data>
|
||||
<data name="music_from_position" xml:space="preserve">
|
||||
<value>From position</value>
|
||||
</data>
|
||||
<data name="music_id" xml:space="preserve">
|
||||
<value>Id</value>
|
||||
</data>
|
||||
<data name="music_invalid_input" xml:space="preserve">
|
||||
<value>Invalid input.</value>
|
||||
</data>
|
||||
<data name="music_max_playtime_none" xml:space="preserve">
|
||||
<value>Max playtime has no limit now.</value>
|
||||
</data>
|
||||
<data name="music_max_playtime_set" xml:space="preserve">
|
||||
<value>Max playtime set to {0} second(s).</value>
|
||||
</data>
|
||||
<data name="music_max_queue_unlimited" xml:space="preserve">
|
||||
<value>Max music queue size set to unlimited.</value>
|
||||
</data>
|
||||
<data name="music_max_queue_x" xml:space="preserve">
|
||||
<value>Max music queue size set to {0} track(s).</value>
|
||||
</data>
|
||||
<data name="music_must_be_in_voice" xml:space="preserve">
|
||||
<value>You need to be in the voice channel on this server.</value>
|
||||
</data>
|
||||
<data name="music_name" xml:space="preserve">
|
||||
<value>Name</value>
|
||||
</data>
|
||||
<data name="music_now_playing" xml:space="preserve">
|
||||
<value>Now Playing</value>
|
||||
</data>
|
||||
<data name="music_no_player" xml:space="preserve">
|
||||
<value>No active music player.</value>
|
||||
</data>
|
||||
<data name="music_no_search_results" xml:space="preserve">
|
||||
<value>No search results.</value>
|
||||
</data>
|
||||
<data name="music_paused" xml:space="preserve">
|
||||
<value>Music playback paused.</value>
|
||||
</data>
|
||||
<data name="music_player_none" xml:space="preserve">
|
||||
<value>No music player active.</value>
|
||||
</data>
|
||||
<data name="music_player_queue" xml:space="preserve">
|
||||
<value>Player Queue - Page {0}/{1}</value>
|
||||
</data>
|
||||
<data name="music_playing_song" xml:space="preserve">
|
||||
<value>Playing Song</value>
|
||||
</data>
|
||||
<data name="music_playlists" xml:space="preserve">
|
||||
<value>`#{0}` - **{1}** by *{2}* ({3} songs)</value>
|
||||
</data>
|
||||
<data name="music_playlists_page" xml:space="preserve">
|
||||
<value>Page {0} of Saved Playlists</value>
|
||||
</data>
|
||||
<data name="music_playlist_deleted" xml:space="preserve">
|
||||
<value>Playlist deleted.</value>
|
||||
</data>
|
||||
<data name="music_playlist_delete_fail" xml:space="preserve">
|
||||
<value>Failed to delete that playlist. It either doesn't exist, or you are not its author.</value>
|
||||
</data>
|
||||
<data name="music_playlist_id_not_found" xml:space="preserve">
|
||||
<value>Playlist with that ID doesn't exist.</value>
|
||||
</data>
|
||||
<data name="music_playlist_queue_complete" xml:space="preserve">
|
||||
<value>Playlist queue complete.</value>
|
||||
</data>
|
||||
<data name="music_playlist_saved" xml:space="preserve">
|
||||
<value>Playlist Saved</value>
|
||||
</data>
|
||||
<data name="music_play_limit" xml:space="preserve">
|
||||
<value>{0}s limit</value>
|
||||
</data>
|
||||
<data name="music_queue" xml:space="preserve">
|
||||
<value>Queue</value>
|
||||
</data>
|
||||
<data name="music_queued_song" xml:space="preserve">
|
||||
<value>Queued Song</value>
|
||||
</data>
|
||||
<data name="music_queue_cleared" xml:space="preserve">
|
||||
<value>Music queue cleared.</value>
|
||||
</data>
|
||||
<data name="music_queue_full" xml:space="preserve">
|
||||
<value>Queue is full at {0}/{0}.</value>
|
||||
</data>
|
||||
<data name="music_removed_song" xml:space="preserve">
|
||||
<value>Removed song</value>
|
||||
<comment>context: "removed song #5"</comment>
|
||||
</data>
|
||||
<data name="music_repeating_cur_song" xml:space="preserve">
|
||||
<value>Repeating Current Song</value>
|
||||
</data>
|
||||
<data name="music_repeating_playlist" xml:space="preserve">
|
||||
<value>Repeating Playlist</value>
|
||||
</data>
|
||||
<data name="music_repeating_track" xml:space="preserve">
|
||||
<value>Repeating Track</value>
|
||||
</data>
|
||||
<data name="music_repeating_track_stopped" xml:space="preserve">
|
||||
<value>Current track repeat stopped.</value>
|
||||
</data>
|
||||
<data name="music_resumed" xml:space="preserve">
|
||||
<value>Music playback resumed.</value>
|
||||
</data>
|
||||
<data name="music_rpl_disabled" xml:space="preserve">
|
||||
<value>Repeat playlist disabled.</value>
|
||||
</data>
|
||||
<data name="music_rpl_enabled" xml:space="preserve">
|
||||
<value>Repeat playlist enabled.</value>
|
||||
</data>
|
||||
<data name="music_set_music_channel" xml:space="preserve">
|
||||
<value>I will now output playing, finished, paused and removed songs in this channel.</value>
|
||||
</data>
|
||||
<data name="music_skipped_to" xml:space="preserve">
|
||||
<value>Skipped to `{0}:{1}`</value>
|
||||
</data>
|
||||
<data name="music_songs_shuffled" xml:space="preserve">
|
||||
<value>Songs shuffled.</value>
|
||||
</data>
|
||||
<data name="music_song_moved" xml:space="preserve">
|
||||
<value>Song Moved</value>
|
||||
</data>
|
||||
<data name="music_time_format" xml:space="preserve">
|
||||
<value>{0}h {1}m {2}s</value>
|
||||
</data>
|
||||
<data name="music_to_position" xml:space="preserve">
|
||||
<value>To position</value>
|
||||
</data>
|
||||
<data name="music_unlimited" xml:space="preserve">
|
||||
<value>unlimited</value>
|
||||
</data>
|
||||
<data name="music_volume_input_invalid" xml:space="preserve">
|
||||
<value>Volume must be between 0 and 100</value>
|
||||
</data>
|
||||
<data name="music_volume_set" xml:space="preserve">
|
||||
<value>Volume set to {0}%</value>
|
||||
</data>
|
||||
<data name="permissions_acm_disable" xml:space="preserve">
|
||||
<value>Disabled usage of ALL MODULES on {0} channel.</value>
|
||||
</data>
|
||||
|
@ -14,9 +14,9 @@ namespace NadekoBot.Services.Impl
|
||||
public class StatsService : IStatsService
|
||||
{
|
||||
private readonly DiscordShardedClient _client;
|
||||
private DateTime _started;
|
||||
private readonly DateTime _started;
|
||||
|
||||
public const string BotVersion = "1.1.8-alpha";
|
||||
public const string BotVersion = "1.2-beta";
|
||||
|
||||
public string Author => "Kwoth#2560";
|
||||
public string Library => "Discord.Net";
|
||||
|
Loading…
Reference in New Issue
Block a user