Use file-scoped namespaces

This commit is contained in:
Andriy
2023-07-29 15:14:52 +03:00
parent a24332370d
commit 8ab067a027
58 changed files with 2222 additions and 2280 deletions
+3 -4
View File
@@ -1,9 +1,8 @@
namespace Kruzya.TelegramBot.Core.Cache
namespace Kruzya.TelegramBot.Core.Cache;
public interface ICacheStorage<TKey, TValue>
{
public interface ICacheStorage<TKey, TValue>
{
public bool TryGetValue(TKey key, out TValue value);
public void SetValue(TKey key, TValue value, int timeToLive);
public TValue GetOr(TKey key, TValue value);
}
}
+3 -4
View File
@@ -2,10 +2,10 @@
using System.Collections.Generic;
using System.Threading;
namespace Kruzya.TelegramBot.Core.Cache
namespace Kruzya.TelegramBot.Core.Cache;
public class MemoryCache<TKey, TValue> : ICacheStorage<TKey, TValue>
{
public class MemoryCache<TKey, TValue> : ICacheStorage<TKey, TValue>
{
/// <summary>
/// Represents a cache entry in internal dictionary.
/// </summary>
@@ -100,5 +100,4 @@ namespace Kruzya.TelegramBot.Core.Cache
Value = value
});
}
}
}
+3 -4
View File
@@ -7,10 +7,10 @@ using System.Linq;
using System.Reflection;
using Microsoft.Extensions.Configuration;
namespace Kruzya.TelegramBot.Core
namespace Kruzya.TelegramBot.Core;
public sealed class Core
{
public sealed class Core
{
/// <summary>
/// The Core API version.
/// </summary>
@@ -203,5 +203,4 @@ namespace Kruzya.TelegramBot.Core
return null;
};
}
}
}
+3 -4
View File
@@ -1,10 +1,10 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace Kruzya.TelegramBot.Core.Data
namespace Kruzya.TelegramBot.Core.Data;
public class BotUser
{
public class BotUser
{
/// <summary>
/// The unique bot user identifier.
/// </summary>
@@ -20,5 +20,4 @@ namespace Kruzya.TelegramBot.Core.Data
/// The Telegram User identifier.
/// </summary>
public long UserId { get; set; }
}
}
+3 -4
View File
@@ -4,10 +4,10 @@ using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Kruzya.TelegramBot.Core.Data
namespace Kruzya.TelegramBot.Core.Data;
public class BotUserValue
{
public class BotUserValue
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid BotUserValueId { get; set; }
@@ -37,5 +37,4 @@ namespace Kruzya.TelegramBot.Core.Data
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull });
ValueType = value.GetType().FullName;
}
}
}
+3 -4
View File
@@ -1,10 +1,10 @@
using Kruzya.TelegramBot.Core.EF;
using Microsoft.EntityFrameworkCore;
namespace Kruzya.TelegramBot.Core.Data
namespace Kruzya.TelegramBot.Core.Data;
public class CoreContext : AutoSaveDbContext
{
public class CoreContext : AutoSaveDbContext
{
/// <summary>
/// The all known users.
/// </summary>
@@ -21,5 +21,4 @@ namespace Kruzya.TelegramBot.Core.Data
{
Database.Migrate();
}
}
}
+9 -10
View File
@@ -2,17 +2,17 @@
using BotFramework;
using Microsoft.EntityFrameworkCore;
namespace Kruzya.TelegramBot.Core
{
/// <summary>
/// Resolves the GUIDs from database to entities.
/// </summary>
/// <typeparam name="TResolvedEntity">Entity type</typeparam>
/// <typeparam name="TAppContext">Database context where entity should be finded</typeparam>
public class DbResolverParameter<TResolvedEntity, TAppContext> : IParameterParser<TResolvedEntity>
namespace Kruzya.TelegramBot.Core;
/// <summary>
/// Resolves the GUIDs from database to entities.
/// </summary>
/// <typeparam name="TResolvedEntity">Entity type</typeparam>
/// <typeparam name="TAppContext">Database context where entity should be finded</typeparam>
public class DbResolverParameter<TResolvedEntity, TAppContext> : IParameterParser<TResolvedEntity>
where TAppContext : DbContext
where TResolvedEntity : class
{
{
private TAppContext _dbContext;
public DbResolverParameter(TAppContext dbContext)
@@ -37,5 +37,4 @@ namespace Kruzya.TelegramBot.Core
return false;
}
}
}
+3 -4
View File
@@ -2,10 +2,10 @@
using Telegram.Bot;
using Telegram.Bot.Types;
namespace Kruzya.TelegramBot.Core.Extensions
namespace Kruzya.TelegramBot.Core.Extensions;
public static class BotExtension
{
public static class BotExtension
{
public static async Task<bool> CanPunishMember(this ITelegramBotClient bot, Chat chat, User user, User victim = null)
{
var canUse = await IsUserAdminAsync(bot, chat, user);
@@ -42,5 +42,4 @@ namespace Kruzya.TelegramBot.Core.Extensions
return await bot.GetChatMemberAsync(chat.Id, user.Id) is ChatMemberOwner
or ChatMemberAdministrator {CanRestrictMembers: true};
}
}
}
+3 -4
View File
@@ -3,10 +3,10 @@ using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace Kruzya.TelegramBot.Core.Extensions
namespace Kruzya.TelegramBot.Core.Extensions;
public static class HttpClientExtension
{
public static class HttpClientExtension
{
public static async Task<T> GetJsonAsync<T>(this HttpClient client, Uri requestUri)
{
var response = await client.GetStringAsync(requestUri);
@@ -18,5 +18,4 @@ namespace Kruzya.TelegramBot.Core.Extensions
var response = await client.GetStringAsync(requestUri);
return JsonConvert.DeserializeObject<T>(response);
}
}
}
+3 -4
View File
@@ -2,10 +2,10 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
namespace Kruzya.TelegramBot.Core.Extensions
namespace Kruzya.TelegramBot.Core.Extensions;
internal static class ModuleArrayExtension
{
internal static class ModuleArrayExtension
{
public static void ConfigureServices(this Module[] modules, IServiceCollection services)
{
foreach (var module in modules) module.ConfigureServices(services);
@@ -15,5 +15,4 @@ namespace Kruzya.TelegramBot.Core.Extensions
{
foreach (var module in modules) module.Configure(app, env);
}
}
}
+3 -4
View File
@@ -1,9 +1,9 @@
using Microsoft.EntityFrameworkCore;
namespace Kruzya.TelegramBot.Core.Extensions
namespace Kruzya.TelegramBot.Core.Extensions;
public static partial class RepositoryExtension
{
public static partial class RepositoryExtension
{
public static TEntity Create<TEntity>(this DbSet<TEntity> repository) where TEntity : class, new()
{
var entity = new TEntity();
@@ -11,5 +11,4 @@ namespace Kruzya.TelegramBot.Core.Extensions
return entity;
}
}
}
+3 -4
View File
@@ -1,9 +1,9 @@
using System.Web;
namespace Kruzya.TelegramBot.Core.Extensions
namespace Kruzya.TelegramBot.Core.Extensions;
public static class StringExtension
{
public static class StringExtension
{
public static string HtmlEncode(this string content)
{
return HttpUtility.HtmlEncode(content);
@@ -13,5 +13,4 @@ namespace Kruzya.TelegramBot.Core.Extensions
{
return HttpUtility.HtmlDecode(content);
}
}
}
+3 -4
View File
@@ -1,10 +1,10 @@
using System.Text;
using Telegram.Bot.Types;
namespace Kruzya.TelegramBot.Core.Extensions
namespace Kruzya.TelegramBot.Core.Extensions;
public static class UserExtension
{
public static class UserExtension
{
public static string ToHtml(this User user, bool byUsername = false)
{
var text = new StringBuilder();
@@ -27,5 +27,4 @@ namespace Kruzya.TelegramBot.Core.Extensions
return $"{name} (ID: {user.Id}, Username: {user.Username ?? "N/A"})";
}
}
}
+3 -4
View File
@@ -9,10 +9,10 @@ using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
namespace Kruzya.TelegramBot.Core.Handler
namespace Kruzya.TelegramBot.Core.Handler;
public abstract class CommonHandler : BotEventHandler
{
public abstract class CommonHandler : BotEventHandler
{
protected readonly CoreContext Db;
protected Message? Message => RawUpdate.Message;
@@ -58,5 +58,4 @@ namespace Kruzya.TelegramBot.Core.Handler
{
await Bot.AnswerCallbackQueryAsync(id, message);
}
}
}
+3 -4
View File
@@ -6,10 +6,10 @@ using Kruzya.TelegramBot.Core.Data;
using Microsoft.EntityFrameworkCore;
using Telegram.Bot.Types;
namespace Kruzya.TelegramBot.Core.Handler
namespace Kruzya.TelegramBot.Core.Handler;
public class GeneralHandler : BotEventHandler
{
public class GeneralHandler : BotEventHandler
{
[AttributeUsage(AttributeTargets.Method)]
public sealed class HandleEverythingAttribute : HandlerAttribute
{
@@ -72,5 +72,4 @@ namespace Kruzya.TelegramBot.Core.Handler
UserId = user
});
}
}
}
+3 -4
View File
@@ -3,10 +3,10 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace Kruzya.TelegramBot.Core
namespace Kruzya.TelegramBot.Core;
public abstract class Module
{
public abstract class Module
{
protected readonly Core Core;
protected IConfiguration Configuration => Core.Configuration;
@@ -32,5 +32,4 @@ namespace Kruzya.TelegramBot.Core
{
return (T) Core.EnsureLoaded(typeof(T));
}
}
}
+3 -4
View File
@@ -2,10 +2,10 @@ using System.Globalization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
namespace Kruzya.TelegramBot.Core
namespace Kruzya.TelegramBot.Core;
public class Program
{
public class Program
{
public static void Main(string[] args)
{
CultureInfo.CurrentCulture = new CultureInfo("ru-RU");
@@ -16,5 +16,4 @@ namespace Kruzya.TelegramBot.Core
Host.CreateDefaultBuilder(args)
.UseSystemd()
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
}
}
+3 -4
View File
@@ -5,10 +5,10 @@ using BotFramework.Abstractions;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace Kruzya.TelegramBot.Core.Service
namespace Kruzya.TelegramBot.Core.Service;
public abstract class AbstractTimedHostedService : IHostedService, IDisposable
{
public abstract class AbstractTimedHostedService : IHostedService, IDisposable
{
private Timer _timer;
protected readonly ILogger _logger;
@@ -70,5 +70,4 @@ namespace Kruzya.TelegramBot.Core.Service
{
await Task.Delay(500);
}
}
}
+3 -4
View File
@@ -3,14 +3,13 @@ using System.Threading.Tasks;
using Kruzya.TelegramBot.Core.Data;
using Telegram.Bot.Types;
namespace Kruzya.TelegramBot.Core.Service
namespace Kruzya.TelegramBot.Core.Service;
public interface IReputation
{
public interface IReputation
{
public Task<double> GetUserReputationAsync(Chat chat, User user);
public Task<double> SetUserReputationAsync(Chat chat, User user, double value);
public Task<double> GetReputationDiffAsync(Chat chat, User sender, User receiver);
public Task<double> IncrementReputationAsync(Chat chat, User user, double diff);
public Task<IEnumerable<IReputationEntity>> GetChatRatingAsync(Chat chat, int limit = 10, int offset = 0);
}
}
+3 -4
View File
@@ -11,10 +11,10 @@ using Microsoft.Extensions.Logging;
using Telegram.Bot;
using Telegram.Bot.Types;
namespace Kruzya.TelegramBot.Core.Service
namespace Kruzya.TelegramBot.Core.Service;
public class UserService
{
public class UserService
{
private readonly List<long> _superUsers;
private readonly Dictionary<long, string> _statusMap;
private readonly ICacheStorage<long, User> _userCache;
@@ -87,5 +87,4 @@ namespace Kruzya.TelegramBot.Core.Service
{
return _statusMap.ContainsKey(userId) ? _statusMap[userId] : null;
}
}
}
+3 -4
View File
@@ -14,10 +14,10 @@ using System.Collections.Concurrent;
using Kruzya.TelegramBot.Core.Options;
using Telegram.Bot.Types;
namespace Kruzya.TelegramBot.Core
namespace Kruzya.TelegramBot.Core;
public class Startup
{
public class Startup
{
private Core _core;
public Startup(IConfiguration configuration)
@@ -66,5 +66,4 @@ namespace Kruzya.TelegramBot.Core
{
_core.Modules.Configure(app, env);
}
}
}
+3 -4
View File
@@ -6,10 +6,10 @@ using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using West.TelegramBot.ChatQuotes.Json;
namespace West.TelegramBot.ChatQuotes
namespace West.TelegramBot.ChatQuotes;
public class ChatQuotes : Module
{
public class ChatQuotes : Module
{
public static readonly JsonSerializerSettings SerializerSettings = new()
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
@@ -28,5 +28,4 @@ namespace West.TelegramBot.ChatQuotes
{
services.AddSingleton<QuoteGeneratorService>();
}
}
}
@@ -1,10 +1,10 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
namespace West.TelegramBot.ChatQuotes.Json
namespace West.TelegramBot.ChatQuotes.Json;
class NullToEmptyObjectResolver : DefaultContractResolver
{
class NullToEmptyObjectResolver : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
return type.GetProperties()
@@ -14,5 +14,4 @@ namespace West.TelegramBot.ChatQuotes.Json
return jp;
}).ToList();
}
}
}
+3 -4
View File
@@ -4,10 +4,10 @@ using Microsoft.Extensions.DependencyInjection;
using West.TelegramBot.CodeWatcher.Options;
using West.TelegramBot.CodeWatcher.Service;
namespace West.TelegramBot.CodeWatcher
namespace West.TelegramBot.CodeWatcher;
public class CodeWatcher : Module
{
public class CodeWatcher : Module
{
public CodeWatcher(Core core) : base(core) {}
public override void ConfigureServices(IServiceCollection services)
@@ -19,5 +19,4 @@ namespace West.TelegramBot.CodeWatcher
c.BaseAddress = new Uri(Core.Configuration["HastebinUrl"]!);
});
}
}
}
@@ -6,7 +6,6 @@ using BotFramework.Enums;
using Kruzya.TelegramBot.CombotAntiSpam.Combot;
using Kruzya.TelegramBot.Core.Extensions;
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
namespace Kruzya.TelegramBot.CombotAntiSpam;
@@ -1,10 +1,9 @@
using System.Threading.Tasks;
namespace Kruzya.TelegramBot.Destiny2.WhereIsXur.Provider
namespace Kruzya.TelegramBot.Destiny2.WhereIsXur.Provider;
public interface IXurPlaceProvider
{
public interface IXurPlaceProvider
{
public Task<string> GetPlaceAsync();
public string GetPlace();
}
}
@@ -2,10 +2,10 @@ using System.Threading.Tasks;
using Fizzler.Systems.HtmlAgilityPack;
using HtmlAgilityPack;
namespace Kruzya.TelegramBot.Destiny2.WhereIsXur.Provider
namespace Kruzya.TelegramBot.Destiny2.WhereIsXur.Provider;
public class XurWiki : IXurPlaceProvider
{
public class XurWiki : IXurPlaceProvider
{
public async Task<string> GetPlaceAsync()
{
var web = new HtmlWeb();
@@ -24,5 +24,4 @@ namespace Kruzya.TelegramBot.Destiny2.WhereIsXur.Provider
{
return GetPlaceAsync().GetAwaiter().GetResult();
}
}
}
@@ -5,10 +5,10 @@ using Kruzya.TelegramBot.Destiny2.WhereIsXur.Provider;
using Telegram.Bot;
using Telegram.Bot.Types.Enums;
namespace Kruzya.TelegramBot.Destiny2.WhereIsXur
namespace Kruzya.TelegramBot.Destiny2.WhereIsXur;
public class RequestHandler : BotEventHandler
{
public class RequestHandler : BotEventHandler
{
protected readonly IXurPlaceProvider _placeProvider;
public RequestHandler(IXurPlaceProvider xurPlaceProvider)
@@ -33,5 +33,4 @@ namespace Kruzya.TelegramBot.Destiny2.WhereIsXur
{
await Bot.SendTextMessageAsync(Chat, $"<b>Xûr</b> place is <code>{place}</code>", parseMode: ParseMode.Html);
}
}
}
+3 -4
View File
@@ -2,10 +2,10 @@
using Kruzya.TelegramBot.Destiny2.WhereIsXur.Provider;
using Microsoft.Extensions.DependencyInjection;
namespace Kruzya.TelegramBot.Destiny2.WhereIsXur
namespace Kruzya.TelegramBot.Destiny2.WhereIsXur;
public class WhereIsXur : Module
{
public class WhereIsXur : Module
{
public WhereIsXur(Core.Core core) : base(core)
{
}
@@ -14,5 +14,4 @@ namespace Kruzya.TelegramBot.Destiny2.WhereIsXur
{
services.AddSingleton<IXurPlaceProvider, XurWiki>();
}
}
}
+3 -4
View File
@@ -6,15 +6,14 @@ using Kruzya.TelegramBot.Core;
using Microsoft.Extensions.DependencyInjection;
namespace West.Entertainment
namespace West.Entertainment;
public class Entertainment : Module
{
public class Entertainment : Module
{
public Entertainment(Core core) : base(core) { }
public override void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IGuessCache, GuessCache>();
}
}
}
+3 -4
View File
@@ -13,10 +13,10 @@ using Microsoft.Extensions.Logging;
using Telegram.Bot;
using Telegram.Bot.Types.Enums;
namespace West.Entertainment.Handler
namespace West.Entertainment.Handler;
public class Common : BotEventHandler
{
public class Common : BotEventHandler
{
private readonly UserService _userService;
private readonly ILogger _logger;
private readonly CoreContext _db;
@@ -60,5 +60,4 @@ namespace West.Entertainment.Handler
await Bot.SendTextMessageAsync(Chat.Id, msg.ToString(), parseMode: ParseMode.Html);
}
}
}
@@ -11,10 +11,10 @@ using Microsoft.Extensions.Logging;
using Telegram.Bot;
using Telegram.Bot.Types;
namespace West.Entertainment.Handler.Fun
namespace West.Entertainment.Handler.Fun;
public abstract class AbstractAnimationReply : BotEventHandler
{
public abstract class AbstractAnimationReply : BotEventHandler
{
private readonly CoreContext _db;
private readonly ILogger _logger;
@@ -104,5 +104,4 @@ namespace West.Entertainment.Handler.Fun
}
protected virtual int? GetMessageIdToReply() => Message?.MessageId;
}
}
+3 -4
View File
@@ -10,10 +10,10 @@ using Kruzya.TelegramBot.Core.Data;
using Microsoft.Extensions.Logging;
using Telegram.Bot;
namespace West.Entertainment.Handler.Fun
namespace West.Entertainment.Handler.Fun;
public class Bayan : AbstractAnimationReply
{
public class Bayan : AbstractAnimationReply
{
protected override TimeSpan Cooldown => TimeSpan.Zero;
public Bayan(CoreContext db, ILogger<Bayan> logger, ThreadSafeRandom rng) : base(db, logger, rng) { }
@@ -47,5 +47,4 @@ namespace West.Entertainment.Handler.Fun
protected override bool CanHandle()
=> Message?.ReplyToMessage != null;
}
}
@@ -6,10 +6,10 @@ using Kruzya.TelegramBot.Core;
using Kruzya.TelegramBot.Core.Data;
using Microsoft.Extensions.Logging;
namespace West.Entertainment.Handler.Fun
namespace West.Entertainment.Handler.Fun;
public class JavaScript : AbstractAnimationReply
{
public class JavaScript : AbstractAnimationReply
{
public JavaScript(CoreContext db, ILogger<JavaScript> logger, ThreadSafeRandom rng) : base(db, logger, rng) { }
protected override Regex AnimationMatch => new(
@@ -29,5 +29,4 @@ namespace West.Entertainment.Handler.Fun
{
await HandleAnimation();
}
}
}
+3 -4
View File
@@ -8,10 +8,10 @@ using Kruzya.TelegramBot.Core;
using Kruzya.TelegramBot.Core.Data;
using Microsoft.Extensions.Logging;
namespace West.Entertainment.Handler.Fun
namespace West.Entertainment.Handler.Fun;
public class Python : AbstractAnimationReply
{
public class Python : AbstractAnimationReply
{
protected override Regex AnimationMatch =>
new("питон|пайтон|python|путхон|питухон|петухон",
RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
@@ -32,5 +32,4 @@ namespace West.Entertainment.Handler.Fun
}
public Python(CoreContext db, ILogger<Python> logger, ThreadSafeRandom rng) : base(db, logger, rng) { }
}
}
+6 -7
View File
@@ -8,13 +8,13 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Kruzya.TelegramBot.RichSiteSummary.Data
namespace Kruzya.TelegramBot.RichSiteSummary.Data;
/// <summary>
/// Represents a feed in database.
/// </summary>
public class Feed : RepresentableEntity
{
/// <summary>
/// Represents a feed in database.
/// </summary>
public class Feed : RepresentableEntity
{
#region RepresentableEntity
protected override string ViewableText
{
@@ -86,5 +86,4 @@ namespace Kruzya.TelegramBot.RichSiteSummary.Data
public virtual ICollection<Subscriber> Subscribers { get; set; }
public override string ToString() => Title;
}
}
+6 -7
View File
@@ -9,13 +9,13 @@ using System.Text;
using Kruzya.TelegramBot.RichSiteSummary.UrchinTrackingModule;
using Telegram.Bot.Types.Enums;
namespace Kruzya.TelegramBot.RichSiteSummary.Data
namespace Kruzya.TelegramBot.RichSiteSummary.Data;
/// <summary>
/// Represents a post from feed in database.
/// </summary>
public class Post : RepresentableEntity
{
/// <summary>
/// Represents a post from feed in database.
/// </summary>
public class Post : RepresentableEntity
{
#region RepresentableEntity
protected override ParseMode DefaultRepresentation
{
@@ -103,5 +103,4 @@ namespace Kruzya.TelegramBot.RichSiteSummary.Data
return message.ToString();
}
}
}
}
@@ -7,13 +7,13 @@ using System;
using System.Web;
using Telegram.Bot.Types.Enums;
namespace Kruzya.TelegramBot.RichSiteSummary.Data
namespace Kruzya.TelegramBot.RichSiteSummary.Data;
/// <summary>
/// Implements the basic logic for rendering Database Entities in messages.
/// </summary>
public abstract class RepresentableEntity
{
/// <summary>
/// Implements the basic logic for rendering Database Entities in messages.
/// </summary>
public abstract class RepresentableEntity
{
protected virtual string ViewableText { get; }
protected virtual string ViewableUrl { get; }
protected virtual ParseMode DefaultRepresentation { get; }
@@ -57,5 +57,4 @@ namespace Kruzya.TelegramBot.RichSiteSummary.Data
}
#endregion
}
}
@@ -1,10 +1,10 @@
using Kruzya.TelegramBot.Core.EF;
using Microsoft.EntityFrameworkCore;
namespace Kruzya.TelegramBot.RichSiteSummary.Data
namespace Kruzya.TelegramBot.RichSiteSummary.Data;
public class RichSiteSummaryContext : AutoSaveDbContext
{
public class RichSiteSummaryContext : AutoSaveDbContext
{
/// <summary>
/// Repository with all feeds in database.
/// </summary>
@@ -54,5 +54,4 @@ namespace Kruzya.TelegramBot.RichSiteSummary.Data
.WithMany(f => f.Subscribers)
.HasForeignKey(s => s.FeedId);
}
}
}
+6 -7
View File
@@ -6,13 +6,13 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace Kruzya.TelegramBot.RichSiteSummary.Data
namespace Kruzya.TelegramBot.RichSiteSummary.Data;
/// <summary>
/// Represents a subscription in database.
/// </summary>
public class Subscriber
{
/// <summary>
/// Represents a subscription in database.
/// </summary>
public class Subscriber
{
/// <summary>
/// The unique Subscription identifier.
/// </summary>
@@ -52,5 +52,4 @@ namespace Kruzya.TelegramBot.RichSiteSummary.Data
{
Feed = feed;
}
}
}
@@ -1,15 +1,14 @@
using BotFramework;
using Kruzya.TelegramBot.RichSiteSummary.Data;
namespace Kruzya.TelegramBot.RichSiteSummary.Handler
namespace Kruzya.TelegramBot.RichSiteSummary.Handler;
public abstract class AbstractHandler : BotEventHandler
{
public abstract class AbstractHandler : BotEventHandler
{
protected readonly RichSiteSummaryContext _dbContext;
protected AbstractHandler(RichSiteSummaryContext dbContext)
{
_dbContext = dbContext;
}
}
}
+3 -4
View File
@@ -13,10 +13,10 @@ using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Telegram.Bot.Types.ReplyMarkups;
namespace Kruzya.TelegramBot.RichSiteSummary.Handler
namespace Kruzya.TelegramBot.RichSiteSummary.Handler;
public class FeedList : AbstractHandler
{
public class FeedList : AbstractHandler
{
public FeedList(RichSiteSummaryContext dbContext) : base(dbContext)
{
}
@@ -307,5 +307,4 @@ namespace Kruzya.TelegramBot.RichSiteSummary.Handler
}
#endregion
}
}
@@ -7,10 +7,10 @@ using Microsoft.EntityFrameworkCore;
using Telegram.Bot;
using Telegram.Bot.Types.Enums;
namespace Kruzya.TelegramBot.RichSiteSummary.Handler
namespace Kruzya.TelegramBot.RichSiteSummary.Handler;
public class StatsHandler : AbstractHandler
{
public class StatsHandler : AbstractHandler
{
public StatsHandler(RichSiteSummaryContext dbContext) : base(dbContext)
{
}
@@ -33,5 +33,4 @@ namespace Kruzya.TelegramBot.RichSiteSummary.Handler
await Bot.SendTextMessageAsync(Chat, textMessage.ToString(), parseMode: ParseMode.Html);
}
}
}
+3 -4
View File
@@ -7,10 +7,10 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace Kruzya.TelegramBot.RichSiteSummary
namespace Kruzya.TelegramBot.RichSiteSummary;
public class RichSiteSummary : Module
{
public class RichSiteSummary : Module
{
public RichSiteSummary(Core.Core core) : base(core)
{
}
@@ -33,5 +33,4 @@ namespace Kruzya.TelegramBot.RichSiteSummary
.AddHostedService<Unsubscriber>()
.AddHostedService<MessageSender>();
}
}
}
@@ -5,10 +5,10 @@ using Kruzya.TelegramBot.RichSiteSummary.Data;
using Microsoft.EntityFrameworkCore;
using Telegram.Bot.Types;
namespace Kruzya.TelegramBot.RichSiteSummary
namespace Kruzya.TelegramBot.RichSiteSummary;
internal static class RichSiteSummaryRepositoryExtension
{
internal static class RichSiteSummaryRepositoryExtension
{
#region Subscriber
/// <summary>
@@ -68,5 +68,4 @@ namespace Kruzya.TelegramBot.RichSiteSummary
await repository.FirstOrDefaultAsync(post => post.Url == url && (feed == null || post.Feed == feed));
#endregion
}
}
@@ -9,10 +9,10 @@ using Telegram.Bot;
using Telegram.Bot.Exceptions;
using Telegram.Bot.Types;
namespace Kruzya.TelegramBot.RichSiteSummary.Service
namespace Kruzya.TelegramBot.RichSiteSummary.Service;
public class MessageSender : AbstractTimedHostedService
{
public class MessageSender : AbstractTimedHostedService
{
protected override TimeSpan TimerPeriod => TimeSpan.FromSeconds(1);
protected readonly ConcurrentQueue<UserMessage> Queue;
@@ -85,5 +85,4 @@ namespace Kruzya.TelegramBot.RichSiteSummary.Service
Queue.Enqueue(message);
}
}
}
+9 -10
View File
@@ -20,16 +20,16 @@ using Feed = Kruzya.TelegramBot.RichSiteSummary.Data.Feed;
using CodeHollow.FeedReader.Feeds;
namespace Kruzya.TelegramBot.RichSiteSummary.Service
namespace Kruzya.TelegramBot.RichSiteSummary.Service;
/// <summary>
/// Performs a RSS feed parsing.
/// Grabs the all feeds from database.
///
/// TODO: move entity grabbing to another service.
/// </summary>
public class RssFetch : IHostedService, IDisposable
{
/// <summary>
/// Performs a RSS feed parsing.
/// Grabs the all feeds from database.
///
/// TODO: move entity grabbing to another service.
/// </summary>
public class RssFetch : IHostedService, IDisposable
{
private Timer _timer;
private readonly ILogger _logger;
@@ -257,5 +257,4 @@ namespace Kruzya.TelegramBot.RichSiteSummary.Service
}
#endregion
}
}
@@ -9,10 +9,10 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Telegram.Bot.Types;
namespace Kruzya.TelegramBot.RichSiteSummary.Service
namespace Kruzya.TelegramBot.RichSiteSummary.Service;
public class Unsubscriber : AbstractTimedHostedService
{
public class Unsubscriber : AbstractTimedHostedService
{
protected readonly ConcurrentQueue<UserUnsubscribe> Queue;
protected readonly IServiceScopeFactory ScopeFactory;
@@ -45,5 +45,4 @@ namespace Kruzya.TelegramBot.RichSiteSummary.Service
);
await dbContext.SaveChangesAsync();
}
}
}
@@ -1,11 +1,10 @@
namespace Kruzya.TelegramBot.RichSiteSummary.UrchinTrackingModule
namespace Kruzya.TelegramBot.RichSiteSummary.UrchinTrackingModule;
public struct UtmParameters
{
public struct UtmParameters
{
public string Source;
public string Type;
public string Campaign;
public string Term;
public string Content;
}
}
@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Collections.Specialized;
using System.Web;
namespace Kruzya.TelegramBot.RichSiteSummary.UrchinTrackingModule
namespace Kruzya.TelegramBot.RichSiteSummary.UrchinTrackingModule;
public class UtmUtility
{
public class UtmUtility
{
public static string ApplyParameters(string url, UtmParameters parameters)
=> ApplyParameters(new Uri(url), parameters);
@@ -47,5 +47,4 @@ namespace Kruzya.TelegramBot.RichSiteSummary.UrchinTrackingModule
queryParameteters.Set(key, value);
}
}
}
+3 -4
View File
@@ -1,14 +1,13 @@
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
namespace Kruzya.TelegramBot.RichSiteSummary
namespace Kruzya.TelegramBot.RichSiteSummary;
public struct UserMessage
{
public struct UserMessage
{
public ChatId ChatId;
public string Text;
public ParseMode ParseMode;
public bool DisableWebPagePreview;
public string ImageUrl;
}
}
+3 -4
View File
@@ -1,9 +1,8 @@
using Telegram.Bot.Types;
namespace Kruzya.TelegramBot.RichSiteSummary
namespace Kruzya.TelegramBot.RichSiteSummary;
public struct UserUnsubscribe
{
public struct UserUnsubscribe
{
public ChatId ChatId;
}
}
+3 -4
View File
@@ -5,10 +5,10 @@ using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
namespace Kruzya.TelegramBot.UrlLimitations
namespace Kruzya.TelegramBot.UrlLimitations;
public static class MessageExtension
{
public static class MessageExtension
{
public static async Task<bool> HasUnknownMention(this Message message, ITelegramBotClient bot)
{
foreach (var mention in message.Entities.Where(e =>
@@ -59,5 +59,4 @@ namespace Kruzya.TelegramBot.UrlLimitations
return false;
}
}
}
+3 -4
View File
@@ -11,10 +11,10 @@ using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
namespace Kruzya.TelegramBot.UrlLimitations
namespace Kruzya.TelegramBot.UrlLimitations;
public class MessageHandler : BotEventHandler
{
public class MessageHandler : BotEventHandler
{
protected ILogger Logger;
protected readonly CoreContext dbCtx;
@@ -55,5 +55,4 @@ namespace Kruzya.TelegramBot.UrlLimitations
);
}
}
}
}
+3 -4
View File
@@ -1,11 +1,10 @@
using Kruzya.TelegramBot.Core;
namespace Kruzya.TelegramBot.UrlLimitations
namespace Kruzya.TelegramBot.UrlLimitations;
public class UrlLimitations : Module
{
public class UrlLimitations : Module
{
public UrlLimitations(Core.Core core) : base(core)
{
}
}
}
+3 -4
View File
@@ -6,10 +6,10 @@ using BotFramework.Enums;
using Kruzya.TelegramBot.Core.Data;
using Kruzya.TelegramBot.Core.Extensions;
namespace Kruzya.TelegramBot.UrlLimitations
namespace Kruzya.TelegramBot.UrlLimitations;
public class UserJoinHandler : BotEventHandler
{
public class UserJoinHandler : BotEventHandler
{
protected readonly CoreContext dbCtx;
public UserJoinHandler(CoreContext coreContext)
@@ -25,5 +25,4 @@ namespace Kruzya.TelegramBot.UrlLimitations
await dbCtx.UserValues.SetOptionValue<UInt16>(Chat.Id, member.Id, "urlLimitations.messagesAfterJoin",
0);
}
}
}
+3 -4
View File
@@ -14,10 +14,10 @@ using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
namespace UserGroupTag
namespace UserGroupTag;
public class Handler : BotEventHandler
{
public class Handler : BotEventHandler
{
private readonly CoreContext _db;
private readonly ICacheStorage<long, User> _userCache;
@@ -103,5 +103,4 @@ namespace UserGroupTag
return user;
}
}
}
+3 -4
View File
@@ -1,9 +1,8 @@
using Kruzya.TelegramBot.Core;
namespace UserGroupTag
namespace UserGroupTag;
public class UserGroupTag : Module
{
public class UserGroupTag : Module
{
public UserGroupTag(Core core) : base(core) { }
}
}