mirror of
https://gitlab.com/Kwoth/nadekobot.git
synced 2025-09-12 10:18:27 -04:00
Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
3470762b30 | ||
|
2cbb4ecd3d | ||
|
619bee811d | ||
|
a09be96200 | ||
|
81254ed5f6 | ||
|
d82e3bd444 | ||
|
9011646b02 | ||
|
2a1f45819d | ||
|
d2d0cb9e03 |
14
CHANGELOG.md
14
CHANGELOG.md
@@ -2,9 +2,21 @@
|
|||||||
|
|
||||||
Experimental changelog. Mostly based on [keepachangelog](https://keepachangelog.com/en/1.0.0/) except date format. a-c-f-r-o
|
Experimental changelog. Mostly based on [keepachangelog](https://keepachangelog.com/en/1.0.0/) except date format. a-c-f-r-o
|
||||||
|
|
||||||
## Unreleased
|
## [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`
|
||||||
|
- Bot now sends dm help text ONLY if the message contains one of the keywords specified
|
||||||
|
- 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
|
||||||
|
- Repeaters should no longer have periods when they're missing from the list
|
||||||
|
- Fixed several commands which used error color for success confirmation messages
|
||||||
|
|
||||||
## [3.0.3] - 15.09.2021
|
## [3.0.3] - 15.09.2021
|
||||||
|
|
||||||
|
@@ -12,7 +12,7 @@ namespace NadekoBot.Common.Configs
|
|||||||
public sealed partial class BotConfig : ICloneable<BotConfig>
|
public sealed partial class BotConfig : ICloneable<BotConfig>
|
||||||
{
|
{
|
||||||
[Comment(@"DO NOT CHANGE")]
|
[Comment(@"DO NOT CHANGE")]
|
||||||
public int Version { get; set; }
|
public int Version { get; set; } = 2;
|
||||||
|
|
||||||
[Comment(@"Most commands, when executed, have a small colored line
|
[Comment(@"Most commands, when executed, have a small colored line
|
||||||
next to the response. The color depends whether the command
|
next to the response. The color depends whether the command
|
||||||
@@ -49,6 +49,11 @@ Supports embeds. How it looks: https://puu.sh/B0BLV.png")]
|
|||||||
[YamlMember(ScalarStyle = ScalarStyle.Literal)]
|
[YamlMember(ScalarStyle = ScalarStyle.Literal)]
|
||||||
public string DmHelpText { get; set; }
|
public string DmHelpText { get; set; }
|
||||||
|
|
||||||
|
[Comment(@"Only users who send a DM to the bot containing one of the specified words will get a DmHelpText response.
|
||||||
|
Case insensitive.
|
||||||
|
Leave empty to reply with DmHelpText to every DM.")]
|
||||||
|
public List<string> DmHelpTextKeywords { get; set; }
|
||||||
|
|
||||||
[Comment(@"This is the response for the .h command")]
|
[Comment(@"This is the response for the .h command")]
|
||||||
[YamlMember(ScalarStyle = ScalarStyle.Literal)]
|
[YamlMember(ScalarStyle = ScalarStyle.Literal)]
|
||||||
public string HelpText { get; set; }
|
public string HelpText { get; set; }
|
||||||
@@ -89,7 +94,6 @@ See RotatingStatuses submodule in Administration.")]
|
|||||||
|
|
||||||
public BotConfig()
|
public BotConfig()
|
||||||
{
|
{
|
||||||
Version = 1;
|
|
||||||
var color = new ColorConfig();
|
var color = new ColorConfig();
|
||||||
Color = color;
|
Color = color;
|
||||||
DefaultLocale = new CultureInfo("en-US");
|
DefaultLocale = new CultureInfo("en-US");
|
||||||
@@ -127,6 +131,14 @@ See RotatingStatuses submodule in Administration.")]
|
|||||||
Prefix = ".";
|
Prefix = ".";
|
||||||
RotateStatuses = false;
|
RotateStatuses = false;
|
||||||
GroupGreets = false;
|
GroupGreets = false;
|
||||||
|
DmHelpTextKeywords = new List<string>()
|
||||||
|
{
|
||||||
|
"help",
|
||||||
|
"commands",
|
||||||
|
"cmds",
|
||||||
|
"module",
|
||||||
|
"can you do"
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -89,6 +89,8 @@ namespace NadekoBot.Common.Replacements
|
|||||||
_reps.TryAdd("%server.id%", () => g is null ? "DM" : g.Id.ToString());
|
_reps.TryAdd("%server.id%", () => g is null ? "DM" : g.Id.ToString());
|
||||||
_reps.TryAdd("%server.name%", () => g is null ? "DM" : g.Name);
|
_reps.TryAdd("%server.name%", () => g is null ? "DM" : g.Name);
|
||||||
_reps.TryAdd("%server.members%", () => g != null && g is SocketGuild sg ? sg.MemberCount.ToString() : "?");
|
_reps.TryAdd("%server.members%", () => g != null && g is SocketGuild sg ? sg.MemberCount.ToString() : "?");
|
||||||
|
_reps.TryAdd("%server.boosters%", () => g.PremiumSubscriptionCount.ToString());
|
||||||
|
_reps.TryAdd("%server.boost_level%", () => ((int)g.PremiumTier).ToString());
|
||||||
_reps.TryAdd("%server.time%", () =>
|
_reps.TryAdd("%server.time%", () =>
|
||||||
{
|
{
|
||||||
TimeZoneInfo to = TimeZoneInfo.Local;
|
TimeZoneInfo to = TimeZoneInfo.Local;
|
||||||
|
@@ -90,7 +90,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
await _service.TimedMute(user, ctx.User, time.Time, reason: reason).ConfigureAwait(false);
|
await _service.TimedMute(user, ctx.User, time.Time, reason: reason).ConfigureAwait(false);
|
||||||
await ReplyErrorLocalizedAsync(strs.user_muted_time(Format.Bold(user.ToString()), (int)time.Time.TotalMinutes));
|
await ReplyConfirmLocalizedAsync(strs.user_muted_time(Format.Bold(user.ToString()), (int)time.Time.TotalMinutes));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -150,7 +150,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
await _service.TimedMute(user, ctx.User, time.Time, MuteType.Chat, reason: reason).ConfigureAwait(false);
|
await _service.TimedMute(user, ctx.User, time.Time, MuteType.Chat, reason: reason).ConfigureAwait(false);
|
||||||
await ReplyErrorLocalizedAsync(strs.user_chat_mute_time(Format.Bold(user.ToString()), (int)time.Time.TotalMinutes));
|
await ReplyConfirmLocalizedAsync(strs.user_chat_mute_time(Format.Bold(user.ToString()), (int)time.Time.TotalMinutes));
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -209,7 +209,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
await _service.TimedMute(user, ctx.User, time.Time, MuteType.Voice, reason: reason).ConfigureAwait(false);
|
await _service.TimedMute(user, ctx.User, time.Time, MuteType.Voice, reason: reason).ConfigureAwait(false);
|
||||||
await ReplyErrorLocalizedAsync(strs.user_voice_mute_time(Format.Bold(user.ToString()), (int)time.Time.TotalMinutes));
|
await ReplyConfirmLocalizedAsync(strs.user_voice_mute_time(Format.Bold(user.ToString()), (int)time.Time.TotalMinutes));
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
@@ -61,7 +61,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
if (msg is null)
|
if (msg is null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
await ReplyErrorLocalizedAsync(strs.reprm(msg));
|
await ReplyConfirmLocalizedAsync(strs.reprm(msg));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -28,7 +28,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await ReplyErrorLocalizedAsync(strs.protection_not_running("Anti-Alt"));
|
await ReplyConfirmLocalizedAsync(strs.protection_not_running("Anti-Alt"));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
@@ -69,11 +69,11 @@ namespace NadekoBot.Modules.Administration
|
|||||||
{
|
{
|
||||||
if (_service.TryStopAntiRaid(ctx.Guild.Id))
|
if (_service.TryStopAntiRaid(ctx.Guild.Id))
|
||||||
{
|
{
|
||||||
return ReplyErrorLocalizedAsync(strs.prot_disable("Anti-Raid"));
|
return ReplyConfirmLocalizedAsync(strs.prot_disable("Anti-Raid"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return ReplyErrorLocalizedAsync(strs.protection_not_running("Anti-Raid"));
|
return ReplyPendingLocalizedAsync(strs.protection_not_running("Anti-Raid"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,11 +145,11 @@ namespace NadekoBot.Modules.Administration
|
|||||||
{
|
{
|
||||||
if (_service.TryStopAntiSpam(ctx.Guild.Id))
|
if (_service.TryStopAntiSpam(ctx.Guild.Id))
|
||||||
{
|
{
|
||||||
return ReplyErrorLocalizedAsync(strs.prot_disable("Anti-Spam"));
|
return ReplyConfirmLocalizedAsync(strs.prot_disable("Anti-Spam"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return ReplyErrorLocalizedAsync(strs.protection_not_running("Anti-Spam"));
|
return ReplyPendingLocalizedAsync(strs.protection_not_running("Anti-Spam"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -189,7 +189,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
index--;
|
index--;
|
||||||
var rr = rrs[index];
|
var rr = rrs[index];
|
||||||
_service.Remove(ctx.Guild.Id, index);
|
_service.Remove(ctx.Guild.Id, index);
|
||||||
await ReplyErrorLocalizedAsync(strs.reaction_role_removed(index + 1));
|
await ReplyConfirmLocalizedAsync(strs.reaction_role_removed(index + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
|
@@ -24,11 +24,11 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
if (newVal)
|
if (newVal)
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalizedAsync(strs.adsarm_enable(Prefix));
|
await ReplyConfirmLocalizedAsync(strs.adsarm_enable(Prefix));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalizedAsync(strs.adsarm_disable(Prefix));
|
await ReplyConfirmLocalizedAsync(strs.adsarm_disable(Prefix));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -88,7 +88,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
};
|
};
|
||||||
_service.AddNewAutoCommand(cmd);
|
_service.AddNewAutoCommand(cmd);
|
||||||
|
|
||||||
await ReplyErrorLocalizedAsync(strs.autocmd_add(Format.Code(Format.Sanitize(cmdText)), cmd.Interval));
|
await ReplyConfirmLocalizedAsync(strs.autocmd_add(Format.Code(Format.Sanitize(cmdText)), cmd.Interval));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
@@ -226,7 +226,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
if (enabled)
|
if (enabled)
|
||||||
await ReplyConfirmLocalizedAsync(strs.fwdm_start).ConfigureAwait(false);
|
await ReplyConfirmLocalizedAsync(strs.fwdm_start).ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await ReplyConfirmLocalizedAsync(strs.fwdm_stop).ConfigureAwait(false);
|
await ReplyPendingLocalizedAsync(strs.fwdm_stop).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
@@ -238,7 +238,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
if (enabled)
|
if (enabled)
|
||||||
await ReplyConfirmLocalizedAsync(strs.fwall_start).ConfigureAwait(false);
|
await ReplyConfirmLocalizedAsync(strs.fwall_start).ConfigureAwait(false);
|
||||||
else
|
else
|
||||||
await ReplyConfirmLocalizedAsync(strs.fwall_stop).ConfigureAwait(false);
|
await ReplyPendingLocalizedAsync(strs.fwall_stop).ConfigureAwait(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -376,7 +376,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
var curUser = await ctx.Guild.GetCurrentUserAsync().ConfigureAwait(false);
|
var curUser = await ctx.Guild.GetCurrentUserAsync().ConfigureAwait(false);
|
||||||
await curUser.ModifyAsync(u => u.Nickname = newNick).ConfigureAwait(false);
|
await curUser.ModifyAsync(u => u.Nickname = newNick).ConfigureAwait(false);
|
||||||
|
|
||||||
await ReplyErrorLocalizedAsync(strs.bot_nick(Format.Bold(newNick) ?? "-"));
|
await ReplyConfirmLocalizedAsync(strs.bot_nick(Format.Bold(newNick) ?? "-"));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
@@ -395,7 +395,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
|
|
||||||
await gu.ModifyAsync(u => u.Nickname = newNick).ConfigureAwait(false);
|
await gu.ModifyAsync(u => u.Nickname = newNick).ConfigureAwait(false);
|
||||||
|
|
||||||
await ReplyErrorLocalizedAsync(strs.user_nick(Format.Bold(gu.ToString()), Format.Bold(newNick) ?? "-"));
|
await ReplyConfirmLocalizedAsync(strs.user_nick(Format.Bold(gu.ToString()), Format.Bold(newNick) ?? "-"));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
@@ -496,7 +496,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
public async Task ImagesReload()
|
public async Task ImagesReload()
|
||||||
{
|
{
|
||||||
await _service.ReloadImagesAsync();
|
await _service.ReloadImagesAsync();
|
||||||
await ReplyErrorLocalizedAsync(strs.images_loading);
|
await ReplyConfirmLocalizedAsync(strs.images_loading);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
|
@@ -294,7 +294,7 @@ namespace NadekoBot.Modules.CustomReactions
|
|||||||
.WithDescription("This will delete all custom reactions on this server.")).ConfigureAwait(false))
|
.WithDescription("This will delete all custom reactions on this server.")).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
var count = _service.DeleteAllCustomReactions(ctx.Guild.Id);
|
var count = _service.DeleteAllCustomReactions(ctx.Guild.Id);
|
||||||
await ReplyErrorLocalizedAsync(strs.cleared(count));
|
await ReplyConfirmLocalizedAsync(strs.cleared(count));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -217,7 +217,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[Priority(0)]
|
[Priority(0)]
|
||||||
public async Task Cash(ulong userId)
|
public async Task Cash(ulong userId)
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalizedAsync(strs.has(Format.Code(userId.ToString()), $"{GetCurrency(userId)} {CurrencySign}"));
|
await ReplyConfirmLocalizedAsync(strs.has(Format.Code(userId.ToString()), $"{GetCurrency(userId)} {CurrencySign}"));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
@@ -269,7 +269,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
$"Awarded by bot owner. ({ctx.User.Username}/{ctx.User.Id}) {(msg ?? "")}",
|
$"Awarded by bot owner. ({ctx.User.Username}/{ctx.User.Id}) {(msg ?? "")}",
|
||||||
amount,
|
amount,
|
||||||
gamble: (ctx.Client.CurrentUser.Id != usrId)).ConfigureAwait(false);
|
gamble: (ctx.Client.CurrentUser.Id != usrId)).ConfigureAwait(false);
|
||||||
await ReplyErrorLocalizedAsync(strs.awarded(n(amount) + CurrencySign, $"<@{usrId}>"));
|
await ReplyConfirmLocalizedAsync(strs.awarded(n(amount) + CurrencySign, $"<@{usrId}>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
@@ -340,7 +340,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
if (await _cs.RemoveAsync(usrId, $"Taken by bot owner.({ctx.User.Username}/{ctx.User.Id})", amount,
|
if (await _cs.RemoveAsync(usrId, $"Taken by bot owner.({ctx.User.Username}/{ctx.User.Id})", amount,
|
||||||
gamble: (ctx.Client.CurrentUser.Id != usrId)).ConfigureAwait(false))
|
gamble: (ctx.Client.CurrentUser.Id != usrId)).ConfigureAwait(false))
|
||||||
await ReplyErrorLocalizedAsync(strs.take(amount + CurrencySign, $"<@{usrId}>"));
|
await ReplyConfirmLocalizedAsync(strs.take(amount + CurrencySign, $"<@{usrId}>"));
|
||||||
else
|
else
|
||||||
await ReplyErrorLocalizedAsync(strs.take_fail(amount + CurrencySign, Format.Code(usrId.ToString()), CurrencySign));
|
await ReplyErrorLocalizedAsync(strs.take_fail(amount + CurrencySign, Format.Code(usrId.ToString()), CurrencySign));
|
||||||
}
|
}
|
||||||
|
@@ -145,11 +145,11 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
if (result == DivorceResult.SucessWithPenalty)
|
if (result == DivorceResult.SucessWithPenalty)
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalizedAsync(strs.waifu_divorced_like(Format.Bold(w.Waifu.ToString()), amount + CurrencySign));
|
await ReplyConfirmLocalizedAsync(strs.waifu_divorced_like(Format.Bold(w.Waifu.ToString()), amount + CurrencySign));
|
||||||
}
|
}
|
||||||
else if (result == DivorceResult.Success)
|
else if (result == DivorceResult.Success)
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalizedAsync(strs.waifu_divorced_notlike(amount + CurrencySign));
|
await ReplyConfirmLocalizedAsync(strs.waifu_divorced_notlike(amount + CurrencySign));
|
||||||
}
|
}
|
||||||
else if (result == DivorceResult.NotYourWife)
|
else if (result == DivorceResult.NotYourWife)
|
||||||
{
|
{
|
||||||
@@ -306,7 +306,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[Priority(1)]
|
[Priority(1)]
|
||||||
public async Task WaifuGift(int page = 1)
|
public async Task WaifuGift(int page = 1)
|
||||||
{
|
{
|
||||||
if (--page < 0 || page > 3)
|
if (--page < 0 || page > (_config.Waifu.Items.Count - 1) / 9)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var waifuItems = _service.GetWaifuItems();
|
var waifuItems = _service.GetWaifuItems();
|
||||||
|
@@ -434,7 +434,7 @@ namespace NadekoBot.Modules.Help
|
|||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
public async Task Donate()
|
public async Task Donate()
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalizedAsync(strs.donate(PatreonUrl, PaypalUrl));
|
await ReplyConfirmLocalizedAsync(strs.donate(PatreonUrl, PaypalUrl));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -45,6 +45,11 @@ namespace NadekoBot.Modules.Help.Services
|
|||||||
if (string.IsNullOrWhiteSpace(settings.DmHelpText) || settings.DmHelpText == "-")
|
if (string.IsNullOrWhiteSpace(settings.DmHelpText) || settings.DmHelpText == "-")
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
|
|
||||||
|
// only send dm help text if it contains one of the keywords, if they're specified
|
||||||
|
// if they're not, then reply to every DM
|
||||||
|
if (settings.DmHelpTextKeywords.Any() && !settings.DmHelpTextKeywords.Any(k => msg.Content.Contains(k)))
|
||||||
|
return Task.CompletedTask;
|
||||||
|
|
||||||
var rep = new ReplacementBuilder()
|
var rep = new ReplacementBuilder()
|
||||||
.WithOverride("%prefix%", () => _bss.Data.Prefix)
|
.WithOverride("%prefix%", () => _bss.Data.Prefix)
|
||||||
.WithOverride("%bot.prefix%", () => _bss.Data.Prefix)
|
.WithOverride("%bot.prefix%", () => _bss.Data.Prefix)
|
||||||
|
@@ -125,7 +125,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
queuedMessage?.DeleteAfter(10, _logService);
|
queuedMessage?.DeleteAfter(10, _logService);
|
||||||
if (mp.IsStopped)
|
if (mp.IsStopped)
|
||||||
{
|
{
|
||||||
var msg = await ReplyErrorLocalizedAsync(strs.queue_stopped(Format.Code(Prefix + "play")));
|
var msg = await ReplyPendingLocalizedAsync(strs.queue_stopped(Format.Code(Prefix + "play")));
|
||||||
msg.DeleteAfter(10, _logService);
|
msg.DeleteAfter(10, _logService);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -230,7 +230,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
await _service.SetVolumeAsync(ctx.Guild.Id, vol);
|
await _service.SetVolumeAsync(ctx.Guild.Id, vol);
|
||||||
await ReplyErrorLocalizedAsync(strs.volume_set(vol));
|
await ReplyConfirmLocalizedAsync(strs.volume_set(vol));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
|
@@ -189,7 +189,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
return t;
|
return t;
|
||||||
});
|
});
|
||||||
|
|
||||||
await ReplyErrorLocalizedAsync(strs.started(interval));
|
await ReplyConfirmLocalizedAsync(strs.started(interval));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
@@ -229,7 +229,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
return t;
|
return t;
|
||||||
});
|
});
|
||||||
|
|
||||||
await ReplyErrorLocalizedAsync(strs.started(interval));
|
await ReplyConfirmLocalizedAsync(strs.started(interval));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -363,9 +363,9 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
var added = _service.ToggleBlacklistedTag(ctx.Guild.Id, tag);
|
var added = _service.ToggleBlacklistedTag(ctx.Guild.Id, tag);
|
||||||
|
|
||||||
if (added)
|
if (added)
|
||||||
await ReplyErrorLocalizedAsync(strs.blacklisted_tag_add(tag));
|
await ReplyPendingLocalizedAsync(strs.blacklisted_tag_add(tag));
|
||||||
else
|
else
|
||||||
await ReplyErrorLocalizedAsync(strs.blacklisted_tag_remove(tag));
|
await ReplyPendingLocalizedAsync(strs.blacklisted_tag_remove(tag));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -217,7 +217,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await ReplyErrorLocalizedAsync(strs.perm_out_of_range).ConfigureAwait(false);
|
await ReplyConfirmLocalizedAsync(strs.perm_out_of_range).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
|
@@ -66,7 +66,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await ReplyErrorLocalizedAsync(strs.feed_not_valid).ConfigureAwait(false);
|
await ReplyConfirmLocalizedAsync(strs.feed_not_valid).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
|
@@ -191,7 +191,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await ReplyErrorLocalizedAsync(strs.stream_message_set_all(count));
|
await ReplyConfirmLocalizedAsync(strs.stream_message_set_all(count));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
|
@@ -118,7 +118,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
|
|
||||||
_searches.UserLanguages.AddOrUpdate(ucp, langs, (key, val) => langs);
|
_searches.UserLanguages.AddOrUpdate(ucp, langs, (key, val) => langs);
|
||||||
|
|
||||||
await ReplyErrorLocalizedAsync(strs.atl_set(from, to));
|
await ReplyConfirmLocalizedAsync(strs.atl_set(from, to));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
|
@@ -37,7 +37,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
public async Task AliasesClear()
|
public async Task AliasesClear()
|
||||||
{
|
{
|
||||||
var count = _service.ClearAliases(ctx.Guild.Id);
|
var count = _service.ClearAliases(ctx.Guild.Id);
|
||||||
await ReplyErrorLocalizedAsync(strs.aliases_cleared(count));
|
await ReplyConfirmLocalizedAsync(strs.aliases_cleared(count));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
|
@@ -148,7 +148,7 @@ namespace NadekoBot.Modules.Utility
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await ReplyErrorLocalizedAsync(strs.reminder_deleted(index + 1));
|
await ReplyConfirmLocalizedAsync(strs.reminder_deleted(index + 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -183,7 +183,9 @@ namespace NadekoBot.Modules.Utility
|
|||||||
private string GetRepeaterInfoString(RunningRepeater runner)
|
private string GetRepeaterInfoString(RunningRepeater runner)
|
||||||
{
|
{
|
||||||
var intervalString = Format.Bold(runner.Repeater.Interval.ToPrettyStringHM());
|
var intervalString = Format.Bold(runner.Repeater.Interval.ToPrettyStringHM());
|
||||||
var executesIn = runner.NextTime - DateTime.UtcNow;
|
var executesIn = runner.NextTime < DateTime.UtcNow
|
||||||
|
? TimeSpan.Zero
|
||||||
|
: runner.NextTime - DateTime.UtcNow;
|
||||||
var executesInString = Format.Bold(executesIn.ToPrettyStringHM());
|
var executesInString = Format.Bold(executesIn.ToPrettyStringHM());
|
||||||
var message = Format.Sanitize(runner.Repeater.Message.TrimTo(50));
|
var message = Format.Sanitize(runner.Repeater.Message.TrimTo(50));
|
||||||
|
|
||||||
|
@@ -76,7 +76,9 @@ where ((guildid >> 22) % {_creds.TotalShards}) == {_client.ShardId};")
|
|||||||
// because repeaters might've been modified meanwhile
|
// because repeaters might've been modified meanwhile
|
||||||
if (timeout > TimeSpan.Zero)
|
if (timeout > TimeSpan.Zero)
|
||||||
{
|
{
|
||||||
await Task.Delay(timeout);
|
await Task.Delay(timeout > TimeSpan.FromMinutes(1)
|
||||||
|
? TimeSpan.FromMinutes(1)
|
||||||
|
: timeout);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,16 +86,17 @@ where ((guildid >> 22) % {_creds.TotalShards}) == {_client.ShardId};")
|
|||||||
var now = DateTime.UtcNow + TimeSpan.FromSeconds(3);
|
var now = DateTime.UtcNow + TimeSpan.FromSeconds(3);
|
||||||
|
|
||||||
var toExecute = new List<RunningRepeater>();
|
var toExecute = new List<RunningRepeater>();
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
lock (_repeaterQueue)
|
lock (_repeaterQueue)
|
||||||
{
|
{
|
||||||
var current = _repeaterQueue.First;
|
var current = _repeaterQueue.First;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
|
||||||
if (current is null || current.Value.NextTime > now)
|
if (current is null || current.Value.NextTime > now)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
toExecute.Add(current.Value);
|
toExecute.Add(current.Value);
|
||||||
_repeaterQueue.RemoveFirst();
|
current = current.Next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,13 +124,23 @@ where ((guildid >> 22) % {_creds.TotalShards}) == {_client.ShardId};")
|
|||||||
{
|
{
|
||||||
if (rep.ErrorCount >= 10)
|
if (rep.ErrorCount >= 10)
|
||||||
{
|
{
|
||||||
|
RemoveFromQueue(rep.Repeater.Id);
|
||||||
await RemoveRepeaterInternal(rep.Repeater);
|
await RemoveRepeaterInternal(rep.Repeater);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UpdatePosition(rep);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdatePosition(RunningRepeater rep)
|
||||||
|
{
|
||||||
|
lock (_queueLocker)
|
||||||
|
{
|
||||||
rep.UpdateNextTime();
|
rep.UpdateNextTime();
|
||||||
|
_repeaterQueue.Remove(rep);
|
||||||
AddToQueue(rep);
|
AddToQueue(rep);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<bool> TriggerExternal(ulong guildId, int index)
|
public async Task<bool> TriggerExternal(ulong guildId, int index)
|
||||||
{
|
{
|
||||||
|
@@ -92,5 +92,15 @@ namespace NadekoBot.Modules.Utility.Services
|
|||||||
var initialIntervalMultiplier = 1 - (triggerCount - Math.Truncate(triggerCount));
|
var initialIntervalMultiplier = 1 - (triggerCount - Math.Truncate(triggerCount));
|
||||||
return DateTime.UtcNow + (Repeater.Interval * initialIntervalMultiplier);
|
return DateTime.UtcNow + (Repeater.Interval * initialIntervalMultiplier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override bool Equals(object? obj)
|
||||||
|
{
|
||||||
|
return obj is RunningRepeater rr && rr.Repeater.Id == this.Repeater.Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int GetHashCode()
|
||||||
|
{
|
||||||
|
return this.Repeater.Id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -31,7 +31,7 @@ namespace NadekoBot.Modules.Xp
|
|||||||
|
|
||||||
_service.XpReset(ctx.Guild.Id, userId);
|
_service.XpReset(ctx.Guild.Id, userId);
|
||||||
|
|
||||||
await ReplyErrorLocalizedAsync(strs.reset_user(userId));
|
await ReplyConfirmLocalizedAsync(strs.reset_user(userId));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
|
@@ -30,7 +30,7 @@ namespace NadekoBot.Modules.Xp.Services
|
|||||||
|
|
||||||
private void Migrate()
|
private void Migrate()
|
||||||
{
|
{
|
||||||
if (_data.Version <= 1)
|
if (_data.Version < 2)
|
||||||
{
|
{
|
||||||
ModifyConfig(c =>
|
ModifyConfig(c =>
|
||||||
{
|
{
|
||||||
|
@@ -128,7 +128,7 @@ namespace NadekoBot.Modules.Xp
|
|||||||
public async Task XpRoleReward(int level)
|
public async Task XpRoleReward(int level)
|
||||||
{
|
{
|
||||||
_service.ResetRoleReward(ctx.Guild.Id, level);
|
_service.ResetRoleReward(ctx.Guild.Id, level);
|
||||||
await ReplyErrorLocalizedAsync(strs.xp_role_reward_cleared(level));
|
await ReplyConfirmLocalizedAsync(strs.xp_role_reward_cleared(level));
|
||||||
}
|
}
|
||||||
|
|
||||||
[NadekoCommand, Aliases]
|
[NadekoCommand, Aliases]
|
||||||
|
@@ -19,7 +19,7 @@ namespace NadekoBot.Services
|
|||||||
private readonly IBotCredentials _creds;
|
private readonly IBotCredentials _creds;
|
||||||
private readonly DateTime _started;
|
private readonly DateTime _started;
|
||||||
|
|
||||||
public const string BotVersion = "3.0.3";
|
public const string BotVersion = "3.0.4";
|
||||||
public string Author => "Kwoth#2452";
|
public string Author => "Kwoth#2452";
|
||||||
public string Library => "Discord.Net";
|
public string Library => "Discord.Net";
|
||||||
|
|
||||||
|
@@ -28,19 +28,15 @@ namespace NadekoBot.Services
|
|||||||
AddParsedProp("locale", bs => bs.DefaultLocale, ConfigParsers.Culture, ConfigPrinters.Culture);
|
AddParsedProp("locale", bs => bs.DefaultLocale, ConfigParsers.Culture, ConfigPrinters.Culture);
|
||||||
AddParsedProp("prefix", bs => bs.Prefix, ConfigParsers.String, ConfigPrinters.ToString);
|
AddParsedProp("prefix", bs => bs.Prefix, ConfigParsers.String, ConfigPrinters.ToString);
|
||||||
|
|
||||||
UpdateColors();
|
Migrate();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateColors()
|
private void Migrate()
|
||||||
{
|
{
|
||||||
var ok = _data.Color.Ok;
|
if (_data.Version < 2)
|
||||||
var error = _data.Color.Error;
|
|
||||||
var pend = _data.Color.Pending;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnStateUpdate()
|
|
||||||
{
|
{
|
||||||
UpdateColors();
|
ModifyConfig(c => c.Version = 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
# DO NOT CHANGE
|
# DO NOT CHANGE
|
||||||
version: 1
|
version: 2
|
||||||
# Most commands, when executed, have a small colored line
|
# Most commands, when executed, have a small colored line
|
||||||
# next to the response. The color depends whether the command
|
# next to the response. The color depends whether the command
|
||||||
# is completed, errored or in progress (pending)
|
# is completed, errored or in progress (pending)
|
||||||
@@ -28,6 +28,15 @@ forwardToAllOwners: false
|
|||||||
# Supports embeds. How it looks: https://puu.sh/B0BLV.png
|
# Supports embeds. How it looks: https://puu.sh/B0BLV.png
|
||||||
dmHelpText: |-
|
dmHelpText: |-
|
||||||
{"description": "Type `%prefix%h` for help."}
|
{"description": "Type `%prefix%h` for help."}
|
||||||
|
# Only users who send a DM to the bot containing one of the specified words will get a DmHelpText response.
|
||||||
|
# Case insensitive.
|
||||||
|
# Leave empty to reply with DmHelpText to every DM.
|
||||||
|
dmHelpTextKeywords:
|
||||||
|
- help
|
||||||
|
- commands
|
||||||
|
- cmds
|
||||||
|
- module
|
||||||
|
- can you do
|
||||||
# This is the response for the .h command
|
# This is the response for the .h command
|
||||||
helpText: |-
|
helpText: |-
|
||||||
{
|
{
|
||||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user