C# Discord bot made using NetCord for keeping a TikTok-style streak

feat: message in server back up and add sqlite3 to docker script

Minito 2e92de73 84ce75b9

+33 -3
+2
Dockerfile
··· 10 10 FROM mcr.microsoft.com/dotnet/aspnet:10.0 11 11 WORKDIR /app 12 12 13 + RUN apt-get update && apt-get install -y sqlite3 14 + 13 15 COPY --from=build /app . 14 16 15 17 ENV DATA_PATH=/app/data
+27 -1
Services/ChannelService.cs
··· 105 105 return true; 106 106 } 107 107 108 - public async Task SendStreakReminderAsync(ulong user1Id, ulong user2Id, bool user1NeedsReminder, bool user2NeedsReminder) 108 + public async Task SendStreakReminderAsync(ulong user1Id, ulong user2Id, bool user1NeedsReminder, bool user2NeedsReminder, ulong serverId) 109 109 { 110 110 if (user1NeedsReminder) 111 111 { ··· 119 119 catch (RestException) 120 120 { 121 121 _logger.LogWarning("Failed to send streak reminder DM to user {UserId}", user1Id); 122 + await SendReminderToTextChannelAsync(serverId, user1Id, user2Id); 122 123 } 123 124 } 124 125 ··· 134 135 catch (RestException) 135 136 { 136 137 _logger.LogWarning("Failed to send streak reminder DM to user {UserId}", user2Id); 138 + await SendReminderToTextChannelAsync(serverId, user2Id, user1Id); 137 139 } 140 + } 141 + } 142 + 143 + private async Task SendReminderToTextChannelAsync(ulong serverId, ulong userToRemind, ulong streakPartnerUserId) 144 + { 145 + try 146 + { 147 + var guildChannels = await _restClient.GetGuildChannelsAsync(serverId); 148 + var textChannel = guildChannels.FirstOrDefault(c => c is NetCord.TextChannel) as NetCord.TextChannel; 149 + 150 + if (textChannel != null) 151 + { 152 + var message = new MessageProperties() 153 + .WithContent($"<@{userToRemind}>, your streak with <@{streakPartnerUserId}> will reset in less than an hour! Send a message in the server to keep it alive! (DM failed to send)"); 154 + await textChannel.SendMessageAsync(message); 155 + } 156 + else 157 + { 158 + _logger.LogWarning("No text channel found in server {ServerId} to send fallback reminder", serverId); 159 + } 160 + } 161 + catch (Exception ex) 162 + { 163 + _logger.LogError(ex, "Failed to send fallback reminder to text channel in server {ServerId}", serverId); 138 164 } 139 165 } 140 166
+2 -1
Services/StreakResetBackgroundService.cs
··· 86 86 streak.User1Id, 87 87 streak.User2Id, 88 88 !streak.User1MessageSent, 89 - !streak.User2MessageSent); 89 + !streak.User2MessageSent, 90 + streak.ServerId); 90 91 91 92 streak.ReminderSent = true; 92 93 }
+2 -1
appsettings.json
··· 5 5 "Logging": { 6 6 "LogLevel": { 7 7 "Default": "Information", 8 - "Microsoft.Hosting.Lifetime": "Information" 8 + "Microsoft.Hosting.Lifetime": "Information", 9 + "Microsoft.EntityFrameworkCore.Database.Command": "Warning" 9 10 } 10 11 } 11 12 }