add /register forced
This commit is contained in:
		| @@ -30,7 +30,7 @@ namespace MareSynchronosServer.Discord | |||||||
|         DiscordSocketClient discordClient; |         DiscordSocketClient discordClient; | ||||||
|         ConcurrentDictionary<ulong, string> DiscordLodestoneMapping = new(); |         ConcurrentDictionary<ulong, string> DiscordLodestoneMapping = new(); | ||||||
|         private Timer _timer; |         private Timer _timer; | ||||||
|         private readonly string[] LodestoneServers = new[] { "eu", "na", "jp", "fr", "na" }; |         private readonly string[] LodestoneServers = new[] { "eu", "na", "jp", "fr", "de" }; | ||||||
|  |  | ||||||
|         public DiscordBot(IServiceProvider services, IConfiguration configuration, ILogger<DiscordBot> logger) |         public DiscordBot(IServiceProvider services, IConfiguration configuration, ILogger<DiscordBot> logger) | ||||||
|         { |         { | ||||||
| @@ -38,6 +38,8 @@ namespace MareSynchronosServer.Discord | |||||||
|             this.configuration = configuration; |             this.configuration = configuration; | ||||||
|             this.logger = logger; |             this.logger = logger; | ||||||
|  |  | ||||||
|  |             authToken = configuration.GetValue<string>("DiscordBotToken"); | ||||||
|  |  | ||||||
|             discordClient = new(new DiscordSocketConfig() |             discordClient = new(new DiscordSocketConfig() | ||||||
|             { |             { | ||||||
|                 DefaultRetryMode = RetryMode.AlwaysRetry |                 DefaultRetryMode = RetryMode.AlwaysRetry | ||||||
| @@ -50,6 +52,11 @@ namespace MareSynchronosServer.Discord | |||||||
|         { |         { | ||||||
|             if (arg.Data.Name == "register") |             if (arg.Data.Name == "register") | ||||||
|             { |             { | ||||||
|  |                 if (arg.Data.Options.FirstOrDefault(f => f.Name == "forced") != null) | ||||||
|  |                 { | ||||||
|  |                     await DeletePreviousUserAccount(arg.User.Id); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|                 var modal = new ModalBuilder(); |                 var modal = new ModalBuilder(); | ||||||
|                 modal.WithTitle("Verify with Lodestone"); |                 modal.WithTitle("Verify with Lodestone"); | ||||||
|                 modal.WithCustomId("register_modal"); |                 modal.WithCustomId("register_modal"); | ||||||
| @@ -64,6 +71,20 @@ namespace MareSynchronosServer.Discord | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         private async Task DeletePreviousUserAccount(ulong id) | ||||||
|  |         { | ||||||
|  |             using var scope = services.CreateScope(); | ||||||
|  |             using var db = scope.ServiceProvider.GetService<MareDbContext>(); | ||||||
|  |             var discordAuthedUser = await db.LodeStoneAuth.Include(u => u.User).FirstOrDefaultAsync(u => u.DiscordId == id); | ||||||
|  |             if (discordAuthedUser != null && discordAuthedUser.User != null) | ||||||
|  |             { | ||||||
|  |                 logger.LogInformation("User will be purged on next round of deletions: " + discordAuthedUser.User); | ||||||
|  |                 discordAuthedUser.User.LastLoggedIn = new DateTime(1900, 0, 0); | ||||||
|  |                 db.Remove(discordAuthedUser); | ||||||
|  |                 await db.SaveChangesAsync(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|         private async Task DiscordClient_ModalSubmitted(SocketModal arg) |         private async Task DiscordClient_ModalSubmitted(SocketModal arg) | ||||||
|         { |         { | ||||||
|             if (arg.Data.CustomId == "register_modal") |             if (arg.Data.CustomId == "register_modal") | ||||||
| @@ -145,7 +166,7 @@ namespace MareSynchronosServer.Discord | |||||||
|                             lodestoneAuth.LodestoneAuthString = null; |                             lodestoneAuth.LodestoneAuthString = null; | ||||||
|  |  | ||||||
|                             embedBuilder.WithTitle("Registration successful"); |                             embedBuilder.WithTitle("Registration successful"); | ||||||
|                             embedBuilder.WithDescription("This is your private secret key. Do not share this private secret key with anyone. If you lose it, it is irrevocably lost." |                             embedBuilder.WithDescription("This is your private secret key. Do not share this private secret key with anyone. **If you lose it, it is irrevocably lost.**" | ||||||
|                                 + Environment.NewLine + Environment.NewLine |                                 + Environment.NewLine + Environment.NewLine | ||||||
|                                 + $"**{computedHash}**" |                                 + $"**{computedHash}**" | ||||||
|                                 + Environment.NewLine + Environment.NewLine |                                 + Environment.NewLine + Environment.NewLine | ||||||
| @@ -158,7 +179,9 @@ namespace MareSynchronosServer.Discord | |||||||
|                         else |                         else | ||||||
|                         { |                         { | ||||||
|                             embedBuilder.WithTitle("Failed to verify your character"); |                             embedBuilder.WithTitle("Failed to verify your character"); | ||||||
|                             embedBuilder.WithDescription("Did not find requested authentication key on your profile. Start over with **/register**"); |                             embedBuilder.WithDescription("Did not find requested authentication key on your profile. Make sure you have saved *twice*, then do **/verify** again."); | ||||||
|  |                             DiscordLodestoneMapping.TryRemove(id, out _); | ||||||
|  |                             db.Remove(lodestoneAuth); | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|                     else |                     else | ||||||
| @@ -271,6 +294,7 @@ namespace MareSynchronosServer.Discord | |||||||
|             var cb = new SlashCommandBuilder(); |             var cb = new SlashCommandBuilder(); | ||||||
|             cb.WithName("register"); |             cb.WithName("register"); | ||||||
|             cb.WithDescription("Starts the registration process for the Mare Synchronos server of this Discord"); |             cb.WithDescription("Starts the registration process for the Mare Synchronos server of this Discord"); | ||||||
|  |             cb.AddOption("forced", ApplicationCommandOptionType.Boolean, "Will forcefully overwrite your current character on the service, if present", false, false); | ||||||
|  |  | ||||||
|             var cb2 = new SlashCommandBuilder(); |             var cb2 = new SlashCommandBuilder(); | ||||||
|             cb2.WithName("verify"); |             cb2.WithName("verify"); | ||||||
| @@ -296,20 +320,30 @@ namespace MareSynchronosServer.Discord | |||||||
|  |  | ||||||
|         public async Task StartAsync(CancellationToken cancellationToken) |         public async Task StartAsync(CancellationToken cancellationToken) | ||||||
|         { |         { | ||||||
|             authToken = configuration.GetValue<string>("DiscordBotToken"); |  | ||||||
|             if (!string.IsNullOrEmpty(authToken)) |             if (!string.IsNullOrEmpty(authToken)) | ||||||
|             { |             { | ||||||
|  |                 authToken = configuration.GetValue<string>("DiscordBotToken"); | ||||||
|  |  | ||||||
|                 await discordClient.LoginAsync(TokenType.Bot, authToken); |                 await discordClient.LoginAsync(TokenType.Bot, authToken); | ||||||
|                 await discordClient.StartAsync(); |                 await discordClient.StartAsync(); | ||||||
|  |  | ||||||
|                 discordClient.Ready += DiscordClient_Ready; |                 discordClient.Ready += DiscordClient_Ready; | ||||||
|                 discordClient.SlashCommandExecuted += DiscordClient_SlashCommandExecuted; |                 discordClient.SlashCommandExecuted += DiscordClient_SlashCommandExecuted; | ||||||
|                 discordClient.ModalSubmitted += DiscordClient_ModalSubmitted; |                 discordClient.ModalSubmitted += DiscordClient_ModalSubmitted; | ||||||
|  |                 discordClient.Disconnected += DiscordClient_Disconnected; | ||||||
|  |  | ||||||
|                 _timer = new Timer(UpdateStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); |                 _timer = new Timer(UpdateStatus, null, TimeSpan.Zero, TimeSpan.FromSeconds(15)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         private async Task DiscordClient_Disconnected(Exception arg) | ||||||
|  |         { | ||||||
|  |             authToken = configuration.GetValue<string>("DiscordBotToken"); | ||||||
|  |  | ||||||
|  |             await discordClient.LoginAsync(TokenType.Bot, authToken); | ||||||
|  |             await discordClient.StartAsync(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         private void UpdateStatus(object state) |         private void UpdateStatus(object state) | ||||||
|         { |         { | ||||||
|             using var scope = services.CreateScope(); |             using var scope = services.CreateScope(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Stanley Dimant
					Stanley Dimant