Compare commits

...

4 Commits
4.1.4 ... 4.1.5

12 changed files with 131 additions and 26 deletions

View File

@@ -5,7 +5,19 @@ Experimental changelog. Mostly based on [keepachangelog](https://keepachangelog.
## Unreleased ## Unreleased
### [4.1.4] - 06-05-2022 ## [4.1.5] - 11.05.2022
### Changed
- `.clubdesc <msg>` will now have a nicer response
### Fixed
- `.give` DM will once again show an amount
- Fixed an issue with filters not working and with custom reactions no longer being able to override commands.
- Fixed `.stock` command
## [4.1.4] - 06-05-2022
### Fixed ### Fixed
@@ -52,7 +64,7 @@ Experimental changelog. Mostly based on [keepachangelog](https://keepachangelog.
- Fixed `.deletexp` command - Fixed `.deletexp` command
- `.give` command should send DMs again - `.give` command should send DMs again
- `.modules` commanad now has a medusa module description - `.modules` command now has a medusa module description
## [4.1.2] - 16.04.2022 ## [4.1.2] - 16.04.2022

View File

@@ -363,7 +363,7 @@ public partial class Gambling : GamblingModule<GamblingService>
return; return;
} }
if (!await _cs.TransferAsync(_eb, ctx.User, receiver, amount, msg)) if (!await _cs.TransferAsync(_eb, ctx.User, receiver, amount, msg, N(amount)))
{ {
await ReplyErrorLocalizedAsync(strs.not_enough(CurrencySign)); await ReplyErrorLocalizedAsync(strs.not_enough(CurrencySign));
return; return;

View File

@@ -1,5 +1,9 @@
using System.Text.Json; using CsvHelper;
using YahooFinanceApi; using CsvHelper.Configuration;
using Google.Protobuf.WellKnownTypes;
using System.Globalization;
using System.Net.Http.Json;
using System.Text.Json;
namespace NadekoBot.Modules.Searches; namespace NadekoBot.Modules.Searches;
@@ -17,19 +21,14 @@ public sealed class DefaultStockDataService : IStockDataService, INService
if (!query.IsAlphaNumeric()) if (!query.IsAlphaNumeric())
return default; return default;
var symbols = await Yahoo.Symbols(query) using var http = _httpClientFactory.CreateClient();
.Fields(Field.LongName, var data = await http.GetFromJsonAsync<YahooQueryModel>(
Field.Symbol, $"https://query1.finance.yahoo.com/v7/finance/quote?symbols={query}");
Field.RegularMarketPrice,
Field.RegularMarketPreviousClose,
Field.MarketCap,
Field.FiftyDayAverageChangePercent,
Field.TwoHundredDayAverageChangePercent,
Field.AverageDailyVolume10Day,
Field.FullExchangeName)
.QueryAsync();
var symbol = symbols.Values.FirstOrDefault(); if (data is null)
return default;
var symbol = data.QuoteResponse.Result.FirstOrDefault();
if (symbol is null) if (symbol is null)
return default; return default;
@@ -79,11 +78,25 @@ public sealed class DefaultStockDataService : IStockDataService, INService
.ToList(); .ToList();
} }
private static CsvConfiguration _csvConfig = new(CultureInfo.InvariantCulture)
{
PrepareHeaderForMatch = args => args.Header.Humanize(LetterCasing.Title)
};
public async Task<IReadOnlyCollection<CandleData>> GetCandleDataAsync(string query) public async Task<IReadOnlyCollection<CandleData>> GetCandleDataAsync(string query)
{ {
var candles = await Yahoo.GetHistoricalAsync(query, DateTime.Now.Subtract(30.Days())); using var http = _httpClientFactory.CreateClient();
await using var resStream = await http.GetStreamAsync(
$"https://query1.finance.yahoo.com/v7/finance/download/{query}"
+ $"?period1={DateTime.UtcNow.Subtract(30.Days()).ToTimestamp().Seconds}"
+ $"&period2={DateTime.UtcNow.ToTimestamp().Seconds}"
+ "&interval=1d");
return candles using var textReader = new StreamReader(resStream);
using var csv = new CsvReader(textReader, _csvConfig);
var records = csv.GetRecords<YahooFinanceCandleData>().ToArray();
return records
.Map(static x => new CandleData(x.Open, x.Close, x.High, x.Low, x.Volume)); .Map(static x => new CandleData(x.Open, x.Close, x.High, x.Low, x.Volume));
} }
} }

View File

@@ -0,0 +1,42 @@
using System.Text.Json.Serialization;
namespace NadekoBot.Modules.Searches;
public class QuoteResponse
{
public class ResultModel
{
[JsonPropertyName("longName")]
public string LongName { get; set; }
[JsonPropertyName("regularMarketPrice")]
public double RegularMarketPrice { get; set; }
[JsonPropertyName("regularMarketPreviousClose")]
public double RegularMarketPreviousClose { get; set; }
[JsonPropertyName("fullExchangeName")]
public string FullExchangeName { get; set; }
[JsonPropertyName("averageDailyVolume10Day")]
public int AverageDailyVolume10Day { get; set; }
[JsonPropertyName("fiftyDayAverageChangePercent")]
public double FiftyDayAverageChangePercent { get; set; }
[JsonPropertyName("twoHundredDayAverageChangePercent")]
public double TwoHundredDayAverageChangePercent { get; set; }
[JsonPropertyName("marketCap")]
public long MarketCap { get; set; }
[JsonPropertyName("symbol")]
public string Symbol { get; set; }
}
[JsonPropertyName("result")]
public List<ResultModel> Result { get; set; }
[JsonPropertyName("error")]
public object Error { get; set; }
}

View File

@@ -0,0 +1,12 @@
namespace NadekoBot.Modules.Searches;
public class YahooFinanceCandleData
{
public DateTime Date { get; set; }
public decimal Open { get; set; }
public decimal High { get; set; }
public decimal Low { get; set; }
public decimal Close { get; set; }
public decimal AdjClose { get; set; }
public long Volume { get; set; }
}

View File

@@ -0,0 +1,9 @@
using System.Text.Json.Serialization;
namespace NadekoBot.Modules.Searches;
public class YahooQueryModel
{
[JsonPropertyName("quoteResponse")]
public QuoteResponse QuoteResponse { get; set; }
}

View File

@@ -319,9 +319,23 @@ public partial class Xp
public async partial Task ClubDescription([Leftover] string desc = null) public async partial Task ClubDescription([Leftover] string desc = null)
{ {
if (_service.SetDescription(ctx.User.Id, desc)) if (_service.SetDescription(ctx.User.Id, desc))
await ReplyConfirmLocalizedAsync(strs.club_desc_updated(Format.Bold(desc ?? "-"))); {
desc = string.IsNullOrWhiteSpace(desc)
? "-"
: desc;
var eb = _eb.Create(ctx)
.WithAuthor(ctx.User)
.WithTitle(GetText(strs.club_desc_update))
.WithOkColor()
.WithDescription(desc);
await ctx.Channel.EmbedAsync(eb);
}
else else
{
await ReplyErrorLocalizedAsync(strs.club_desc_update_failed); await ReplyErrorLocalizedAsync(strs.club_desc_update_failed);
}
} }
[Cmd] [Cmd]

View File

@@ -26,6 +26,7 @@
<PackageReference Include="AWSSDK.S3" Version="3.7.8.4" /> <PackageReference Include="AWSSDK.S3" Version="3.7.8.4" />
<PackageReference Include="CodeHollow.FeedReader" Version="1.2.4" /> <PackageReference Include="CodeHollow.FeedReader" Version="1.2.4" />
<PackageReference Include="CommandLineParser" Version="2.8.0" /> <PackageReference Include="CommandLineParser" Version="2.8.0" />
<PackageReference Include="CsvHelper" Version="27.2.1" />
<PackageReference Include="Discord.Net" Version="3.5.0" /> <PackageReference Include="Discord.Net" Version="3.5.0" />
<PackageReference Include="CoreCLR-NCalc" Version="2.2.92" /> <PackageReference Include="CoreCLR-NCalc" Version="2.2.92" />
<PackageReference Include="Google.Apis.Urlshortener.v1" Version="1.41.1.138" /> <PackageReference Include="Google.Apis.Urlshortener.v1" Version="1.41.1.138" />
@@ -81,7 +82,6 @@
<!-- <PackageReference Include="System.Runtime.Experimental" Version="6.0.2" />--> <!-- <PackageReference Include="System.Runtime.Experimental" Version="6.0.2" />-->
<!-- Used by .crypto command --> <!-- Used by .crypto command -->
<PackageReference Include="YahooFinanceApi" Version="2.1.2" />
<!-- Used by stream notifications --> <!-- Used by stream notifications -->
<PackageReference Include="TwitchLib.Api" Version="3.4.1" /> <PackageReference Include="TwitchLib.Api" Version="3.4.1" />

View File

@@ -17,7 +17,8 @@ public static class CurrencyServiceExtensions
IUser from, IUser from,
IUser to, IUser to,
long amount, long amount,
string? note) string? note,
string formattedAmount)
{ {
var fromWallet = await cs.GetWalletAsync(from.Id); var fromWallet = await cs.GetWalletAsync(from.Id);
var toWallet = await cs.GetWalletAsync(to.Id); var toWallet = await cs.GetWalletAsync(to.Id);
@@ -28,8 +29,8 @@ public static class CurrencyServiceExtensions
{ {
await to.SendConfirmAsync(ebs, await to.SendConfirmAsync(ebs,
string.IsNullOrWhiteSpace(note) string.IsNullOrWhiteSpace(note)
? $"Gift from {from}" ? $"Received {formattedAmount} from {from} "
: $"Gift from {from}: {note}"); : $"Received {formattedAmount} from {from}: {note}");
return true; return true;
} }

View File

@@ -116,6 +116,8 @@ public sealed class BehaviorHandler : IBehaviorHandler, INService
usrMsg.Author.Id, usrMsg.Author.Id,
usrMsg.Channel.Id, usrMsg.Channel.Id,
usrMsg.Content?.TrimTo(10)); usrMsg.Content?.TrimTo(10));
return true;
} }
} }
catch (Exception ex) catch (Exception ex)

View File

@@ -7,7 +7,7 @@ namespace NadekoBot.Services;
public sealed class StatsService : IStatsService, IReadyExecutor, INService public sealed class StatsService : IStatsService, IReadyExecutor, INService
{ {
public const string BOT_VERSION = "4.1.4"; public const string BOT_VERSION = "4.1.5";
public string Author public string Author
=> "Kwoth#2452"; => "Kwoth#2452";

View File

@@ -838,7 +838,7 @@
"club_user_ban_fail": "Failed to ban. You're either not the club owner, or that user is not in your club or applied to it.", "club_user_ban_fail": "Failed to ban. You're either not the club owner, or that user is not in your club or applied to it.",
"club_user_unbanned": "Unbanned user {0} in {1} club.", "club_user_unbanned": "Unbanned user {0} in {1} club.",
"club_user_unban_fail": "Failed to unban. You're either not the club owner, or that user is not in your club or applied to it.", "club_user_unban_fail": "Failed to unban. You're either not the club owner, or that user is not in your club or applied to it.",
"club_desc_updated": "Updated club description to {0}", "club_desc_update": "Club Description Updated",
"club_desc_update_failed": "Failed changing club description.", "club_desc_update_failed": "Failed changing club description.",
"club_disbanded": "Club {0} has been disbanded", "club_disbanded": "Club {0} has been disbanded",
"club_disband_error": "Error. You are either not in a club, or you are not the owner of your club.", "club_disband_error": "Error. You are either not in a club, or you are not the owner of your club.",