Revert "restful with the db"
Some checks failed
gitea.arg.rip/vassago/pipeline/head There was a failure building this commit

This reverts commit 203c6af3cf.
This commit is contained in:
adam 2025-02-04 17:06:22 -05:00
parent 03fdb56190
commit 6298b037b6
2 changed files with 28 additions and 44 deletions

View File

@ -22,7 +22,7 @@ namespace vassago
public async Task StartAsync(CancellationToken cancellationToken) public async Task StartAsync(CancellationToken cancellationToken)
{ {
var dbc = new ChattingContext(); var dbc = new ChattingContext();
await dbc.Database.MigrateAsync(); await dbc.Database.MigrateAsync(cancellationToken);
if (DiscordTokens?.Any() ?? false) if (DiscordTokens?.Any() ?? false)
foreach (var dt in DiscordTokens) foreach (var dt in DiscordTokens)

View File

@ -20,9 +20,14 @@ public class DiscordInterface
internal const string PROTOCOL = "discord"; internal const string PROTOCOL = "discord";
internal DiscordSocketClient client; internal DiscordSocketClient client;
private bool eventsSignedUp = false; private bool eventsSignedUp = false;
private ChattingContext _db;
private static SemaphoreSlim discordChannelSetup = new SemaphoreSlim(1, 1); private static SemaphoreSlim discordChannelSetup = new SemaphoreSlim(1, 1);
private Channel protocolAsChannel; private Channel protocolAsChannel;
public DiscordInterface()
{
_db = new ChattingContext();
}
public async Task Init(string token) public async Task Init(string token)
{ {
@ -47,8 +52,7 @@ public class DiscordInterface
try try
{ {
var db = new ChattingContext(); protocolAsChannel = _db.Channels.FirstOrDefault(c => c.ParentChannel == null && c.Protocol == PROTOCOL);
protocolAsChannel = db.Channels.FirstOrDefault(c => c.ParentChannel == null && c.Protocol == PROTOCOL);
if (protocolAsChannel == null) if (protocolAsChannel == null)
{ {
protocolAsChannel = new Channel() protocolAsChannel = new Channel()
@ -66,8 +70,8 @@ public class DiscordInterface
}; };
protocolAsChannel.SendMessage = (t) => { throw new InvalidOperationException($"discord itself cannot accept text"); }; protocolAsChannel.SendMessage = (t) => { throw new InvalidOperationException($"discord itself cannot accept text"); };
protocolAsChannel.SendFile = (f, t) => { throw new InvalidOperationException($"discord itself cannot send file"); }; protocolAsChannel.SendFile = (f, t) => { throw new InvalidOperationException($"discord itself cannot send file"); };
db.Channels.Add(protocolAsChannel); _db.Channels.Add(protocolAsChannel);
db.SaveChanges(); _db.SaveChanges();
} }
} }
finally finally
@ -110,10 +114,9 @@ public class DiscordInterface
private async Task SelfConnected() private async Task SelfConnected()
{ {
var db = new ChattingContext();
var selfAccount = UpsertAccount(client.CurrentUser, protocolAsChannel); var selfAccount = UpsertAccount(client.CurrentUser, protocolAsChannel);
selfAccount.DisplayName = client.CurrentUser.Username; selfAccount.DisplayName = client.CurrentUser.Username;
await db.SaveChangesAsync(); await _db.SaveChangesAsync();
Behaver.Instance.MarkSelf(selfAccount); Behaver.Instance.MarkSelf(selfAccount);
} }
@ -138,6 +141,7 @@ public class DiscordInterface
await Behaver.Instance.ActOn(m); await Behaver.Instance.ActOn(m);
m.ActedOn = true; // for its own ruposess it might act on it later, but either way, fuck it, we checked. m.ActedOn = true; // for its own ruposess it might act on it later, but either way, fuck it, we checked.
_db.SaveChanges();
} }
private void UserJoined(SocketGuildUser arg) private void UserJoined(SocketGuildUser arg)
@ -185,31 +189,28 @@ public class DiscordInterface
} }
internal vassago.Models.Attachment UpsertAttachment(IAttachment dAttachment) internal vassago.Models.Attachment UpsertAttachment(IAttachment dAttachment)
{ {
var a = _db.Attachments.FirstOrDefault(ai => ai.ExternalId == dAttachment.Id);
var db = new ChattingContext();
var a = db.Attachments.FirstOrDefault(ai => ai.ExternalId == dAttachment.Id);
if (a == null) if (a == null)
{ {
a = new vassago.Models.Attachment(); a = new vassago.Models.Attachment();
db.Attachments.Add(a); _db.Attachments.Add(a);
} }
a.ContentType = dAttachment.ContentType; a.ContentType = dAttachment.ContentType;
a.Description = dAttachment.Description; a.Description = dAttachment.Description;
a.Filename = dAttachment.Filename; a.Filename = dAttachment.Filename;
a.Size = dAttachment.Size; a.Size = dAttachment.Size;
a.Source = new Uri(dAttachment.Url); a.Source = new Uri(dAttachment.Url);
db.SaveChanges();
return a; return a;
} }
internal Message UpsertMessage(IUserMessage dMessage) internal Message UpsertMessage(IUserMessage dMessage)
{ {
var db = new ChattingContext(); var m = _db.Messages.FirstOrDefault(mi => mi.ExternalId == dMessage.Id.ToString() && mi.Protocol == PROTOCOL);
var m = db.Messages.FirstOrDefault(mi => mi.ExternalId == dMessage.Id.ToString() && mi.Protocol == PROTOCOL);
if (m == null) if (m == null)
{ {
m = new Message(); m = new Message();
m.Protocol = PROTOCOL; m.Protocol = PROTOCOL;
db.Messages.Add(m); _db.Messages.Add(m);
} }
m.Attachments = m.Attachments ?? new List<vassago.Models.Attachment>(); m.Attachments = m.Attachments ?? new List<vassago.Models.Attachment>();
if (dMessage.Attachments?.Any() == true) if (dMessage.Attachments?.Any() == true)
@ -234,18 +235,15 @@ public class DiscordInterface
m.Reply = (t) => { return dMessage.ReplyAsync(t); }; m.Reply = (t) => { return dMessage.ReplyAsync(t); };
m.React = (e) => { return attemptReact(dMessage, e); }; m.React = (e) => { return attemptReact(dMessage, e); };
db.SaveChanges();
return m; return m;
} }
internal Channel UpsertChannel(IMessageChannel channel) internal Channel UpsertChannel(IMessageChannel channel)
{ {
Channel c = _db.Channels.FirstOrDefault(ci => ci.ExternalId == channel.Id.ToString() && ci.Protocol == PROTOCOL);
var db = new ChattingContext();
Channel c = db.Channels.FirstOrDefault(ci => ci.ExternalId == channel.Id.ToString() && ci.Protocol == PROTOCOL);
if (c == null) if (c == null)
{ {
c = new Channel(); c = new Channel();
db.Channels.Add(c); _db.Channels.Add(c);
} }
c.DisplayName = channel.Name; c.DisplayName = channel.Name;
@ -255,7 +253,7 @@ public class DiscordInterface
c.Protocol = PROTOCOL; c.Protocol = PROTOCOL;
if (channel is IGuildChannel) if (channel is IGuildChannel)
{ {
c.ParentChannel = UpsertChannel((channel as IGuildChannel).Guild, db); c.ParentChannel = UpsertChannel((channel as IGuildChannel).Guild);
c.ParentChannel.SubChannels.Add(c); c.ParentChannel.SubChannels.Add(c);
} }
else if (channel is IPrivateChannel) else if (channel is IPrivateChannel)
@ -277,24 +275,15 @@ public class DiscordInterface
c.DisplayName = "DM: " + (channel as IPrivateChannel).Recipients?.FirstOrDefault(u => u.Id != client.CurrentUser.Id).Username; c.DisplayName = "DM: " + (channel as IPrivateChannel).Recipients?.FirstOrDefault(u => u.Id != client.CurrentUser.Id).Username;
break; break;
} }
db.SaveChanges();
return c; return c;
} }
internal Channel UpsertChannel(IGuild channel, ChattingContext db = null) internal Channel UpsertChannel(IGuild channel)
{ {
db = db ?? new ChattingContext(); Channel c = _db.Channels.FirstOrDefault(ci => ci.ExternalId == channel.Id.ToString() && ci.Protocol == PROTOCOL);
Console.WriteLine($"upserting *guild*: {channel.Id}");
Channel c = db.Channels.FirstOrDefault(ci => ci.ExternalId == channel.Id.ToString() && ci.Protocol == PROTOCOL);
if (c == null) if (c == null)
{ {
Console.WriteLine($"don't have one already. Creating.");
c = new Channel(); c = new Channel();
db.Channels.Add(c); _db.Channels.Add(c);
Console.WriteLine($"upserting channel {channel.Name} from discord, have to create a new one in the DB");
}
else
{
Console.WriteLine($"found one.");
} }
c.DisplayName = channel.Name; c.DisplayName = channel.Name;
@ -308,17 +297,15 @@ public class DiscordInterface
c.SendMessage = (t) => { throw new InvalidOperationException($"channel {channel.Name} is guild; cannot accept text"); }; c.SendMessage = (t) => { throw new InvalidOperationException($"channel {channel.Name} is guild; cannot accept text"); };
c.SendFile = (f, t) => { throw new InvalidOperationException($"channel {channel.Name} is guild; send file"); }; c.SendFile = (f, t) => { throw new InvalidOperationException($"channel {channel.Name} is guild; send file"); };
db.SaveChanges();
return c; return c;
} }
internal Account UpsertAccount(IUser user, Channel inChannel) internal Account UpsertAccount(IUser user, Channel inChannel)
{ {
var db = new ChattingContext(); var acc = _db.Accounts.FirstOrDefault(ui => ui.ExternalId == user.Id.ToString() && ui.SeenInChannel.Id == inChannel.Id);
var acc = db.Accounts.FirstOrDefault(ui => ui.ExternalId == user.Id.ToString() && ui.SeenInChannel.Id == inChannel.Id);
if (acc == null) if (acc == null)
{ {
acc = new Account(); acc = new Account();
db.Accounts.Add(acc); _db.Accounts.Add(acc);
} }
acc.Username = user.Username; acc.Username = user.Username;
acc.ExternalId = user.Id.ToString(); acc.ExternalId = user.Id.ToString();
@ -326,21 +313,18 @@ public class DiscordInterface
acc.Protocol = PROTOCOL; acc.Protocol = PROTOCOL;
acc.SeenInChannel = inChannel; acc.SeenInChannel = inChannel;
acc.IsUser = db.Users.FirstOrDefault(u => u.Accounts.Any(a => a.ExternalId == acc.ExternalId && a.Protocol == acc.Protocol)); acc.IsUser = _db.Users.FirstOrDefault(u => u.Accounts.Any(a => a.ExternalId == acc.ExternalId && a.Protocol == acc.Protocol));
if(acc.IsUser == null) if(acc.IsUser == null)
{ {
acc.IsUser = new User() { Accounts = new List<Account>() { acc } }; acc.IsUser = new User() { Accounts = new List<Account>() { acc } };
db.Users.Add(acc.IsUser); _db.Users.Add(acc.IsUser);
} }
db.SaveChanges();
return acc; return acc;
} }
private Task attemptReact(IUserMessage msg, string e) private Task attemptReact(IUserMessage msg, string e)
{ {
var c = _db.Channels.FirstOrDefault(c => c.ExternalId == msg.Channel.Id.ToString());
var db = new ChattingContext();
var c = db.Channels.FirstOrDefault(c => c.ExternalId == msg.Channel.Id.ToString());
//var preferredEmote = c.EmoteOverrides?[e] ?? e; //TODO: emote overrides //var preferredEmote = c.EmoteOverrides?[e] ?? e; //TODO: emote overrides
var preferredEmote = e; var preferredEmote = e;
if (Emoji.TryParse(preferredEmote, out Emoji emoji)) if (Emoji.TryParse(preferredEmote, out Emoji emoji))