Skip to content

Commit 5ca3895

Browse files
committed
Merge remote-tracking branch 'origin/dev/0.7' into dev/0.7
# Conflicts: # Botticelli.AI.Test/AIProvider/BaseAiProviderTest.cs # Botticelli.Framework.Controls/BasicControls/Text.cs # Botticelli.Framework.Controls/Parsers/JsonLayoutParser.cs # Botticelli.Talks/Botticelli.Talks.csproj # Viber.Api/Exceptions/ViberClientException.cs
2 parents 4ade419 + 1811c17 commit 5ca3895

File tree

88 files changed

+329
-330
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+329
-330
lines changed

Botticelli.AI.Test/AIProvider/BaseAiProviderTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ protected async Task InnerSendAsyncTest(string query)
5151

5252
AiProvider.NotNull();
5353

54-
await AiProvider!.SendAsync(message, new CancellationToken());
54+
await AiProvider.SendAsync(message, CancellationToken.None);
5555

5656
Thread.Sleep(5000);
5757
var result = NoneBus.SendMessageResponses.Dequeue();
@@ -77,6 +77,6 @@ protected void Setup()
7777
public void TearDown()
7878
{
7979
Server.NotNull();
80-
Server!.Stop();
80+
Server.Stop();
8181
}
8282
}

Botticelli.AI/Exceptions/AiException.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public class AiException : Exception
44
{
5-
public AiException(string message, Exception inner = default) : base(message, inner)
5+
public AiException(string message, Exception? inner = null) : base(message, inner)
66
{
77
}
88
}

Botticelli.Audio/InputAnalyzer.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public AudioInfo Analyze(Stream input)
5252

5353
fileFormat.NotNull();
5454

55-
switch (fileFormat.Extension.ToLowerInvariant())
55+
switch (fileFormat?.Extension.ToLowerInvariant())
5656
{
5757
case "wav":
5858
format = AudioFormat.Wav;
@@ -66,7 +66,7 @@ public AudioInfo Analyze(Stream input)
6666
break;
6767
case "m4a":
6868
case "aac":
69-
reader = default!;
69+
reader = null!;
7070
format = default;
7171

7272
break;
@@ -77,14 +77,14 @@ public AudioInfo Analyze(Stream input)
7777
break;
7878
default:
7979
format = AudioFormat.Unknown;
80-
reader = default!;
80+
reader = null!;
8181

8282
break;
8383
}
8484

8585
if (format == AudioFormat.Unknown) throw new InvalidOperationException("Invalid format!");
8686

87-
if (reader == default) throw new InvalidOperationException("Reader is null!");
87+
if (reader == null) throw new InvalidOperationException("Reader is null!");
8888

8989
return new AudioInfo
9090
{

Botticelli.Auth/Services/BasicBotAuthService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ protected override async Task<IdentifyResponse<BotUserInfo>> DoLogin(BotAuthCred
3030
var entity = await Users.AsNoTracking().FirstOrDefaultAsync(e => e.UserId == dto.UserId && e.IsActive);
3131
var adapted = entity.Adapt<BotUserInfo>();
3232

33-
return entity == default ?
33+
return entity == null ?
3434
new IdentifyResponse<BotUserInfo>(false, $"User with id: {dto.UserId} not found!", null) :
3535
new IdentifyResponse<BotUserInfo>(true, string.Empty, adapted);
3636
}

Botticelli.Bot.Dal/Settings/IDataAccessSettings.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,4 @@ namespace Botticelli.Bot.Data.Settings;
55
/// </summary>
66
public interface IDataAccessSettings
77
{
8-
public static string Section { get; }
9-
string ConnectionString { get; set; }
108
}

Botticelli.Bot.Interfaces/Client/IBusClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public interface IBusClient
1111
public IAsyncEnumerable<SendMessageResponse> SendAndGetResponseSeries(SendMessageRequest request,
1212
CancellationToken token);
1313

14-
public Task<SendMessageResponse> SendAndGetResponse(SendMessageRequest request,
14+
public Task<SendMessageResponse?> SendAndGetResponse(SendMessageRequest request,
1515
CancellationToken token);
1616

1717
public Task SendResponse(SendMessageResponse response, CancellationToken token);

Botticelli.Bot.Utils/BotDataUtils.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public static class BotDataUtils
88
private const string SubDir = "Data";
99
private static string? _botId;
1010

11-
private static string? GetPath()
11+
private static string GetPath()
1212
{
1313
return Path.Combine(SubDir, "botId");
1414
}

Botticelli.Bus.Rabbit/Agent/RabbitAgent.cs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class RabbitAgent<TBot, THandler> : BasicFunctions<TBot>, IBotticelliBusA
2828
private readonly RabbitBusSettings _settings;
2929
private readonly IServiceProvider _sp;
3030
private EventingBasicConsumer? _consumer;
31-
private bool _isActive;
31+
private bool? _isActive;
3232

3333
public RabbitAgent(IConnectionFactory rabbitConnectionFactory,
3434
IServiceProvider sp,
@@ -75,31 +75,35 @@ public async Task StartAsync(CancellationToken cancellationToken)
7575
await Subscribe(cancellationToken);
7676
}
7777

78-
public async Task StopAsync(CancellationToken cancellationToken)
78+
public Task StopAsync(CancellationToken cancellationToken)
7979
{
8080
_isActive = false;
8181
Thread.Sleep(3000);
82+
return Task.CompletedTask;
8283
}
8384

8485
/// <summary>
8586
/// Subscribes with a new handler
8687
/// </summary>
87-
public async Task Subscribe(CancellationToken token)
88+
public Task Subscribe(CancellationToken token)
8889
{
8990
_logger.LogDebug($"{nameof(Subscribe)}({typeof(THandler).Name}) start...");
9091
var handler = _sp.GetRequiredService<THandler>();
9192

9293
ProcessSubscription(token, handler);
94+
return Task.CompletedTask;
9395
}
9496

9597
private void ProcessSubscription(CancellationToken token, THandler handler)
9698
{
97-
if (_consumer == default)
99+
if (_consumer == null)
98100
{
99101
var connection = _rabbitConnectionFactory.CreateConnection();
100102
var channel = connection.CreateModel();
101103
var queue = GetRequestQueueName();
102-
var declareResult = _settings.QueueSettings.TryCreate ? channel.QueueDeclare(queue, _settings.QueueSettings.Durable, false) : channel.QueueDeclarePassive(queue);
104+
var declareResult = _settings.QueueSettings is { TryCreate: true }
105+
? channel.QueueDeclare(queue, _settings.QueueSettings.Durable, false)
106+
: channel.QueueDeclarePassive(queue);
103107

104108
_logger.LogDebug($"{nameof(Subscribe)}({typeof(THandler).Name}) queue declare: {declareResult.QueueName}");
105109

@@ -121,7 +125,8 @@ private void ProcessSubscription(CancellationToken token, THandler handler)
121125
var policy = Policy.Handle<Exception>()
122126
.WaitAndRetry(3, n => TimeSpan.FromSeconds(0.5 * Math.Exp(n)));
123127

124-
policy.Execute(() => handler.Handle(deserialized, token));
128+
if (deserialized != null)
129+
policy.Execute(() => handler.Handle(deserialized, token));
125130
}
126131
catch (Exception ex)
127132
{
@@ -130,7 +135,7 @@ private void ProcessSubscription(CancellationToken token, THandler handler)
130135
};
131136
}
132137

133-
private async Task InnerSend(SendMessageResponse response)
138+
private Task InnerSend(SendMessageResponse response)
134139
{
135140
try
136141
{
@@ -151,5 +156,7 @@ private async Task InnerSend(SendMessageResponse response)
151156

152157
throw;
153158
}
159+
160+
return Task.CompletedTask;
154161
}
155162
}

Botticelli.Bus.Rabbit/Client/RabbitClient.cs

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class RabbitClient<TBot> : BasicFunctions<TBot>, IBusClient
2323
private readonly Dictionary<string, SendMessageResponse> _responses = new(100);
2424
private readonly RabbitBusSettings _settings;
2525
private readonly TimeSpan _timeout;
26-
private EventingBasicConsumer _consumer;
26+
private EventingBasicConsumer? _consumer;
2727

2828
public RabbitClient(IConnectionFactory rabbitConnectionFactory,
2929
RabbitBusSettings settings,
@@ -45,9 +45,13 @@ public async IAsyncEnumerable<SendMessageResponse> SendAndGetResponseSeries(Send
4545

4646
Send(request, channel, GetRequestQueueName());
4747

48-
if (!_responses.TryGetValue(request.Message.Uid, out var prevValue)) yield break;
48+
if (request.Message.Uid == null)
49+
yield break;
50+
51+
if (!_responses.TryGetValue(request.Message.Uid, out var prevValue))
52+
yield break;
4953

50-
while (prevValue.IsPartial == true && prevValue.IsFinal)
54+
while (prevValue is { IsPartial: true, IsFinal: true })
5155
if (_responses.TryGetValue(request.Message.Uid, out var value))
5256
{
5357
if (value.IsFinal) yield return value;
@@ -60,7 +64,7 @@ public async IAsyncEnumerable<SendMessageResponse> SendAndGetResponseSeries(Send
6064
}
6165
}
6266

63-
public async Task<SendMessageResponse> SendAndGetResponse(SendMessageRequest request,
67+
public async Task<SendMessageResponse?> SendAndGetResponse(SendMessageRequest request,
6468
CancellationToken token)
6569
{
6670
try
@@ -84,7 +88,7 @@ public async Task<SendMessageResponse> SendAndGetResponse(SendMessageRequest req
8488
return Task.FromResult(_responses.GetValueOrDefault(request.Message.Uid))!;
8589
});
8690

87-
if (result.FinalHandledResult != default)
91+
if (result.FinalHandledResult != null)
8892
throw new RabbitBusException($"Error getting a response: {result.FinalException.Message}",
8993
result.FinalException);
9094

@@ -98,7 +102,7 @@ public async Task<SendMessageResponse> SendAndGetResponse(SendMessageRequest req
98102
}
99103
}
100104

101-
public async Task SendResponse(SendMessageResponse response, CancellationToken token)
105+
public Task SendResponse(SendMessageResponse response, CancellationToken token)
102106
{
103107
try
104108
{
@@ -113,6 +117,8 @@ public async Task SendResponse(SendMessageResponse response, CancellationToken t
113117

114118
throw;
115119
}
120+
121+
return Task.CompletedTask;
116122
}
117123

118124
private void Init()
@@ -129,11 +135,11 @@ private void Init()
129135
else
130136
channel.ExchangeDeclarePassive(exchange);
131137

132-
var queueDeclareResult = _settings
133-
.QueueSettings
134-
.TryCreate ?
135-
channel.QueueDeclare(queue, _settings.QueueSettings.Durable, false) :
136-
channel.QueueDeclarePassive(queue);
138+
_ = _settings
139+
.QueueSettings
140+
.TryCreate ?
141+
channel.QueueDeclare(queue, _settings.QueueSettings.Durable, false) :
142+
channel.QueueDeclarePassive(queue);
137143

138144

139145
channel.BasicConsume(queue, true, _consumer);
@@ -151,7 +157,8 @@ private void Init()
151157
response.Message.NotNull();
152158
response.Message.Uid.NotNull();
153159

154-
_responses.Add(response.Message.Uid, response);
160+
if (response.Message.Uid != null)
161+
_responses.Add(response.Message.Uid, response);
155162
}
156163
catch (Exception ex)
157164
{

Botticelli.Bus.Rabbit/Client/RabbitEventBusClient.cs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,18 @@ public class RabbitEventBusClient<TBot> : BasicFunctions<TBot>, IEventBusClient
2020

2121
public RabbitEventBusClient(IConnectionFactory rabbitConnectionFactory,
2222
RabbitBusSettings settings,
23-
ILogger<RabbitEventBusClient<TBot>> logger)
23+
ILogger<RabbitEventBusClient<TBot>> logger,
24+
EventingBasicConsumer consumer)
2425
{
2526
_rabbitConnectionFactory = rabbitConnectionFactory;
2627
_settings = settings;
2728
_logger = logger;
29+
_consumer = consumer;
2830

2931
Init();
3032
}
3133

32-
public event IEventBusClient.BusEventHandler OnReceived;
34+
public event IEventBusClient.BusEventHandler? OnReceived;
3335

3436
public Task Send(SendMessageRequest response, CancellationToken token)
3537
{
@@ -63,16 +65,17 @@ private void Init()
6365
var queue = GetResponseQueueName();
6466
var exchange = _settings.Exchange;
6567

66-
if (_settings.QueueSettings.TryCreate)
68+
69+
if (_settings.QueueSettings is { TryCreate: true })
70+
{
6771
channel.ExchangeDeclare(exchange, _settings.ExchangeType);
72+
channel.QueueDeclare(queue, _settings.QueueSettings.Durable, false);
73+
}
6874
else
75+
{
76+
channel.QueueDeclarePassive(queue);
6977
channel.ExchangeDeclarePassive(exchange);
70-
71-
var queueDeclareResult = _settings
72-
.QueueSettings
73-
.TryCreate ?
74-
channel.QueueDeclare(queue, _settings.QueueSettings.Durable, false) :
75-
channel.QueueDeclarePassive(queue);
78+
}
7679

7780
channel.BasicConsume(queue, true, _consumer);
7881

Botticelli.Bus.Rabbit/Exceptions/RabbitBusException.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public class RabbitBusException : Exception
44
{
5-
public RabbitBusException(string message, Exception ex = default) : base(message, ex)
5+
public RabbitBusException(string message, Exception? ex = null) : base(message, ex)
66
{
77
}
88
}

Botticelli.Bus.Rabbit/Extensions/ServiceCollectionExtensions.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Botticelli.Interfaces;
77
using Botticelli.Shared.API.Client.Requests;
88
using Botticelli.Shared.API.Client.Responses;
9+
using Botticelli.Shared.Utils;
910
using Microsoft.Extensions.Configuration;
1011
using Microsoft.Extensions.DependencyInjection;
1112
using RabbitMQ.Client;
@@ -19,6 +20,7 @@ public static class ServiceCollectionExtensions
1920
/// </summary>
2021
/// <typeparam name="TBot"></typeparam>
2122
/// <param name="services"></param>
23+
/// <param name="config"></param>
2224
/// <returns></returns>
2325
public static IServiceCollection UseRabbitBusClient<TBot>(this IServiceCollection services, IConfiguration config)
2426
where TBot : IBot
@@ -30,10 +32,13 @@ public static IServiceCollection UseRabbitBusClient<TBot>(this IServiceCollectio
3032

3133
private static IServiceCollection AddConnectionFactory(this IServiceCollection services, RabbitBusSettings settings)
3234
{
35+
settings.NotNull();
36+
settings.Uri.NotNull();
37+
3338
if (!services.Any(s => s.ServiceType.IsAssignableFrom(typeof(IConnectionFactory))))
3439
services.AddSingleton<IConnectionFactory>(s => new ConnectionFactory
3540
{
36-
Uri = new Uri(settings.Uri),
41+
Uri = new Uri(settings.Uri!),
3742
VirtualHost = settings.VHost,
3843
UserName = settings.UserName,
3944
Password = settings.Password
@@ -54,7 +59,9 @@ private static RabbitBusSettings GetRabbitBusSettings(IConfiguration config)
5459
/// Uses a rabbit bus
5560
/// </summary>
5661
/// <typeparam name="TBot"></typeparam>
62+
/// <typeparam name="THandler"></typeparam>
5763
/// <param name="services"></param>
64+
/// <param name="config"></param>
5865
/// <returns></returns>
5966
public static IServiceCollection UseRabbitBusAgent<TBot, THandler>(this IServiceCollection services,
6067
IConfiguration config)

Botticelli.Bus.Rabbit/Settings/RabbitBusSettings.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
public class RabbitBusSettings : BaseBusSettings
44
{
5-
public string UserName { get; set; }
6-
public string Password { get; set; }
7-
public string VHost { get; set; }
8-
public string Uri { get; set; }
9-
public string Exchange { get; set; }
5+
public string? UserName { get; set; }
6+
public string? Password { get; set; }
7+
public string? VHost { get; set; }
8+
public string? Uri { get; set; }
9+
public string? Exchange { get; set; }
1010

11-
public string ExchangeType { get; set; } = "direct";
12-
public QueueSettings QueueSettings { get; set; }
11+
public string? ExchangeType { get; set; } = "direct";
12+
public QueueSettings? QueueSettings { get; set; }
1313
}

0 commit comments

Comments
 (0)