Skip to content

Commit 95e42f6

Browse files
refactor the telegram bot project into this one and some cleanup
1 parent bac394b commit 95e42f6

28 files changed

+827
-284
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,3 +364,4 @@ FodyWeavers.xsd
364364
/AniWorldReminder_API/settings.json
365365
/AniWorldReminder_API/appdata/settings.json
366366
/AniWorldReminder_API/appsettings.json
367+
.dotnet/

AniWorldReminder_API/AniWorldReminder_API.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.2" />
1312
<PackageReference Include="Dapper" Version="2.1.72" />
13+
<PackageReference Include="Hangfire.AspNetCore" Version="1.8.23" />
14+
<PackageReference Include="Hangfire.MemoryStorage" Version="1.8.1.2" />
1415
<PackageReference Include="HtmlAgilityPack" Version="1.12.4" />
1516
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.5" />
1617
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.5" />
1718
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
1819
<PackageReference Include="MySql.Data" Version="9.6.0" />
20+
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
1921
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.7" />
20-
<PackageReference Include="System.Drawing.Common" Version="10.0.5" />
2122
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.17.0" />
2223
<PackageReference Include="Telegram.Bot" Version="22.9.5.3" />
2324
</ItemGroup>

AniWorldReminder_API/Classes/SettingsHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ internal static class SettingsHelper
1616

1717
// Ensure the directory exists before attempting to read or write the settings file
1818
string? directory = Path.GetDirectoryName(path);
19-
if(!Directory.Exists(directory))
19+
if(!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
2020
{
2121
Directory.CreateDirectory(directory);
2222
}
@@ -68,4 +68,4 @@ internal static class SettingsHelper
6868
.GetValue(settings, null);
6969
}
7070
}
71-
}
71+
}

AniWorldReminder_API/Classes/UpsertEpisodeInfoJob.cs

Lines changed: 377 additions & 0 deletions
Large diffs are not rendered by default.

AniWorldReminder_API/Enums/StreamingPortal.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ public enum StreamingPortal
44
{
55
Undefined = 0,
66
AniWorld = 1,
7-
STO = 2,
8-
MegaKino = 3
7+
STO = 2
98
}
109
}

AniWorldReminder_API/Factories/StreamingPortalServiceFactory.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,6 @@ private static IStreamingPortalService CreateService(StreamingPortal streamingPo
3030
case StreamingPortal.AniWorld:
3131
ILogger<AniWorldService> loggerAniWorld = sp.GetRequiredService<ILogger<AniWorldService>>();
3232
return new AniWorldService(loggerAniWorld, httpClientFactory, tmdbService);
33-
case StreamingPortal.MegaKino:
34-
ILogger<MegaKinoService> loggerMegaKino = sp.GetRequiredService<ILogger<MegaKinoService>>();
35-
return new MegaKinoService(loggerMegaKino, httpClientFactory, "https://megakino.ws", "MegaKino", streamingPortal);
3633
default:
3734
throw new NotImplementedException();
3835
}

AniWorldReminder_API/Interfaces/IDBService.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ public interface IDBService
44
{
55
Task<bool> InitAsync();
66
Task<UserModel?> GetUserByTelegramIdAsync(string telegramChatId);
7+
Task<UserModel> InsertUserAsync(string telegramChatId);
78
Task<UserModel?> GetUserByUsernameAsync(string username);
9+
Task UpdateVerifyTokenAsync(string telegramChatId, string token);
810
Task DeleteVerifyTokenAsync(string telegramChatId);
911
Task UpdateVerificationStatusAsync(string telegramChatId, VerificationStatus verificationStatus);
1012
Task SetVerifyStatusAsync(UserModel user);
@@ -16,6 +18,11 @@ public interface IDBService
1618
Task InsertUsersSeriesAsync(UsersSeriesModel usersSeries);
1719
Task DeleteUsersSeriesAsync(UsersSeriesModel usersSeries);
1820
Task<List<UsersSeriesModel>?> GetUsersSeriesAsync(string userId);
21+
Task<List<SeriesReminderModel>?> GetUsersReminderSeriesAsync();
22+
Task<List<EpisodeModel>?> GetSeriesEpisodesAsync(int seriesId);
23+
Task InsertEpisodesAsync(int seriesId, List<EpisodeModel> episodes);
24+
Task UpdateEpisodesAsync(int seriesId, List<EpisodeModel> episodes);
25+
Task UpdateSeriesInfoAsync(int seriesId, SeriesInfoModel seriesInfo);
1926
Task<UserWebsiteSettings?> GetUserWebsiteSettings(string userId);
2027
Task UpdateUserWebsiteSettings(string userId, UserWebsiteSettings userWebsiteSettings);
2128
Task CreateUserWebsiteSettings(string userId);

AniWorldReminder_API/Interfaces/ITelegramBotService.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ namespace AniWorldReminder_API.Interfaces
77
public interface ITelegramBotService
88
{
99
Task<bool> Init();
10-
Task<Message?> SendMessageAsync(long chatId, string text, bool showLinkPreview = true, ParseMode parseMode = ParseMode.Html, bool silentMessage = false, ReplyKeyboardMarkup? rkm = null);
10+
Task<Message?> SendMessageAsync(long chatId, string text, int? replyId = null, bool showLinkPreview = true, ParseMode parseMode = ParseMode.Html, bool silentMessage = false, ReplyKeyboardMarkup? rkm = null);
11+
Task SendChatAction(long chatId, ChatAction chatAction);
1112
Task<Message?> SendPhotoAsync(long chatId, string photoUrl, string? text = null, ParseMode parseMode = ParseMode.Html, bool silentMessage = false);
1213
}
1314
}

AniWorldReminder_API/Misc/Extensions.cs

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,24 @@ public static string UrlSanitize(this string text)
5252
return (!string.IsNullOrEmpty(result), result);
5353
}
5454

55+
public static IEnumerable<TEnum> GetFlags<TEnum>(this TEnum value, TEnum ignore = default)
56+
where TEnum : struct, Enum
57+
{
58+
Enum enumValue = (Enum)(object)value;
59+
TEnum[] allValues = Enum.GetValues<TEnum>();
60+
61+
return allValues.Where(flag =>
62+
{
63+
if (EqualityComparer<TEnum>.Default.Equals(flag, ignore))
64+
return false;
65+
66+
if (Convert.ToInt64(flag) == 0)
67+
return false;
68+
69+
return enumValue.HasFlag((Enum)(object)flag);
70+
});
71+
}
72+
5573
private static Dictionary<Language, string> VOELanguageKeyCollection = new()
5674
{
5775
{ Language.GerDub, "1"},
@@ -86,6 +104,28 @@ public static string UrlSanitize(this string text)
86104
return default;
87105
}
88106

107+
public static string ToLanguageText(this Language language)
108+
{
109+
if (language == Language.None)
110+
return "None";
111+
112+
Dictionary<Language, string> languageTextCollection = new()
113+
{
114+
{ Language.GerDub, "GerDub" },
115+
{ Language.GerSub, "GerSub" },
116+
{ Language.EngDub, "EngDub" },
117+
{ Language.EngSub, "EngSub" },
118+
{ Language.EngDubGerSub, "EngDub + GerSub" }
119+
};
120+
121+
if (languageTextCollection.TryGetValue(language, out string? languageText))
122+
return languageText;
123+
124+
return string.Join(", ", language
125+
.GetFlags(Language.None)
126+
.Select(flag => languageTextCollection.TryGetValue(flag, out string? text) ? text : flag.ToString()));
127+
}
128+
89129
public static string? GetClaim(this HttpContext httpContext, CustomClaimType claimType)
90130
{
91131
return httpContext.User.Claims
@@ -98,7 +138,6 @@ public static string UrlSanitize(this string text)
98138
{
99139
{ "AniWorld", StreamingPortal.AniWorld },
100140
{ "STO", StreamingPortal.STO },
101-
{ "MegaKino", StreamingPortal.MegaKino },
102141
};
103142

104143
public static StreamingPortal ToStreamingPortal(this string streamingPortal)

AniWorldReminder_API/Misc/Helper.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,22 @@ namespace AniWorldReminder_API.Misc
44
{
55
public static class Helper
66
{
7+
private const int VerifyTokenLifetimeInMinutes = 10;
8+
79
public static string GetString(byte[] reason) => Encoding.ASCII.GetString(reason);
810
public static byte[] GetBytes(string reason) => Encoding.ASCII.GetBytes(reason);
11+
public static string GenerateToken(string telegramChatId)
12+
{
13+
byte[] time = BitConverter.GetBytes(DateTime.Now.AddMinutes(VerifyTokenLifetimeInMinutes).ToBinary());
14+
byte[] key = GetBytes(telegramChatId);
15+
byte[] data = new byte[time.Length + key.Length];
16+
17+
Buffer.BlockCopy(time, 0, data, 0, time.Length);
18+
Buffer.BlockCopy(key, 0, data, time.Length, key.Length);
19+
20+
return Convert.ToBase64String(data);
21+
}
22+
923
public static TokenValidationModel ValidateToken(string token)
1024
{
1125
TokenValidationModel result = new();
@@ -27,6 +41,7 @@ public static TokenValidationModel ValidateToken(string token)
2741
byte[] _key = data.Skip(8).TakeLast(data.Length - 8).ToArray();
2842

2943
DateTime when = DateTime.FromBinary(BitConverter.ToInt64(_time, 0));
44+
result.ExpireDate = when;
3045
if (when < DateTime.Now)
3146
{
3247
result.Errors.Add(TokenValidationStatus.TokenExpired);

0 commit comments

Comments
 (0)