PluralKit/PluralKit.Bot/Services/LogChannelService.cs

59 lines
2.2 KiB
C#
Raw Normal View History

2019-04-19 18:48:37 +00:00
using System.Data;
using System.Threading.Tasks;
using Dapper;
using Discord;
namespace PluralKit.Bot {
public class ServerDefinition {
public ulong Id { get; set; }
2019-06-21 11:52:34 +00:00
public ulong? LogChannel { get; set; }
2019-04-19 18:48:37 +00:00
}
public class LogChannelService {
2019-04-19 18:48:37 +00:00
private IDiscordClient _client;
private DbConnectionFactory _conn;
private EmbedService _embed;
2019-04-19 18:48:37 +00:00
public LogChannelService(IDiscordClient client, DbConnectionFactory conn, EmbedService embed)
2019-04-19 18:48:37 +00:00
{
this._client = client;
this._conn = conn;
this._embed = embed;
2019-04-19 18:48:37 +00:00
}
public async Task LogMessage(PKSystem system, PKMember member, ulong messageId, IGuildChannel originalChannel, IUser sender, string content) {
var logChannel = await GetLogChannel(originalChannel.Guild);
if (logChannel == null) return;
2019-04-19 18:48:37 +00:00
var embed = _embed.CreateLoggedMessageEmbed(system, member, messageId, sender, content, originalChannel);
var url = $"https://discordapp.com/channels/{originalChannel.GuildId}/{originalChannel.Id}/{messageId}";
await logChannel.SendMessageAsync(text: url, embed: embed);
2019-04-19 18:48:37 +00:00
}
public async Task<ITextChannel> GetLogChannel(IGuild guild) {
using (var conn = await _conn.Obtain())
{
var server =
await conn.QueryFirstOrDefaultAsync<ServerDefinition>("select * from servers where id = @Id",
new {Id = guild.Id});
if (server?.LogChannel == null) return null;
return await _client.GetChannelAsync(server.LogChannel.Value) as ITextChannel;
}
2019-04-19 18:48:37 +00:00
}
public async Task SetLogChannel(IGuild guild, ITextChannel newLogChannel) {
var def = new ServerDefinition {
Id = guild.Id,
2019-06-21 11:52:34 +00:00
LogChannel = newLogChannel?.Id
2019-04-19 18:48:37 +00:00
};
using (var conn = await _conn.Obtain())
{
await conn.QueryAsync(
"insert into servers (id, log_channel) values (@Id, @LogChannel) on conflict (id) do update set log_channel = @LogChannel",
def);
}
2019-04-19 18:48:37 +00:00
}
}
}