Add message lookup and log channel setting commands
This commit is contained in:
@@ -10,14 +10,16 @@ namespace PluralKit.Bot {
|
||||
private SystemStore _systems;
|
||||
private MemberStore _members;
|
||||
private SwitchStore _switches;
|
||||
private MessageStore _messages;
|
||||
private IDiscordClient _client;
|
||||
|
||||
public EmbedService(SystemStore systems, MemberStore members, IDiscordClient client, SwitchStore switches)
|
||||
public EmbedService(SystemStore systems, MemberStore members, IDiscordClient client, SwitchStore switches, MessageStore messages)
|
||||
{
|
||||
_systems = systems;
|
||||
_members = members;
|
||||
_client = client;
|
||||
_switches = switches;
|
||||
_messages = messages;
|
||||
}
|
||||
|
||||
public async Task<Embed> CreateSystemEmbed(PKSystem system) {
|
||||
@@ -117,5 +119,23 @@ namespace PluralKit.Bot {
|
||||
.WithDescription(outputStr)
|
||||
.Build();
|
||||
}
|
||||
|
||||
public async Task<Embed> CreateMessageInfoEmbed(ulong messageId)
|
||||
{
|
||||
var msg = await _messages.Get(messageId);
|
||||
var channel = (ITextChannel) await _client.GetChannelAsync(msg.Message.Channel);
|
||||
var serverMsg = await channel.GetMessageAsync(msg.Message.Mid);
|
||||
|
||||
var memberStr = $"{msg.Member.Name} (`{msg.Member.Hid}`)";
|
||||
if (msg.Member.Pronouns != null) memberStr += $"\n*(pronouns: **{msg.Member.Pronouns}**)*";
|
||||
|
||||
return new EmbedBuilder()
|
||||
.WithAuthor(msg.Member.Name, msg.Member.AvatarUrl)
|
||||
.WithDescription(serverMsg.Content)
|
||||
.AddField("System", msg.System.Name != null ? $"{msg.System.Name} (`{msg.System.Hid}`)" : $"`{msg.System.Hid}`", true)
|
||||
.AddField("Member", memberStr, true)
|
||||
.WithTimestamp(SnowflakeUtils.FromSnowflake(msg.Message.Mid))
|
||||
.Build();
|
||||
}
|
||||
}
|
||||
}
|
@@ -4,12 +4,12 @@ using Dapper;
|
||||
using Discord;
|
||||
|
||||
namespace PluralKit.Bot {
|
||||
class ServerDefinition {
|
||||
public ulong Id;
|
||||
public ulong LogChannel;
|
||||
public class ServerDefinition {
|
||||
public ulong Id { get; set; }
|
||||
public ulong LogChannel { get; set; }
|
||||
}
|
||||
|
||||
class LogChannelService {
|
||||
public class LogChannelService {
|
||||
private IDiscordClient _client;
|
||||
private IDbConnection _connection;
|
||||
private EmbedService _embed;
|
||||
@@ -30,7 +30,7 @@ namespace PluralKit.Bot {
|
||||
}
|
||||
|
||||
public async Task<ITextChannel> GetLogChannel(IGuild guild) {
|
||||
var server = await _connection.QueryFirstAsync<ServerDefinition>("select * from servers where id = @Id", new { Id = guild.Id });
|
||||
var server = await _connection.QueryFirstOrDefaultAsync<ServerDefinition>("select * from servers where id = @Id", new { Id = guild.Id });
|
||||
if (server == null) return null;
|
||||
return await _client.GetChannelAsync(server.LogChannel) as ITextChannel;
|
||||
}
|
||||
@@ -40,8 +40,8 @@ namespace PluralKit.Bot {
|
||||
Id = guild.Id,
|
||||
LogChannel = newLogChannel.Id
|
||||
};
|
||||
|
||||
await _connection.ExecuteAsync("insert into servers(id, log_channel) values (@Id, @LogChannel) on conflict (id) do update set log_channel = @LogChannel", def);
|
||||
|
||||
await _connection.QueryAsync("insert into servers (id, log_channel) values (@Id, @LogChannel)", def);
|
||||
}
|
||||
}
|
||||
}
|
@@ -49,7 +49,10 @@ namespace PluralKit.Bot
|
||||
|
||||
// Sort by specificity (ProxyString length desc = prefix+suffix length desc = inner message asc = more specific proxy first!)
|
||||
var ordered = potentials.OrderByDescending(p => p.Member.ProxyString.Length);
|
||||
foreach (var potential in ordered) {
|
||||
foreach (var potential in ordered)
|
||||
{
|
||||
if (potential.Member.Prefix == null && potential.Member.Suffix != null) continue;
|
||||
|
||||
var prefix = potential.Member.Prefix ?? "";
|
||||
var suffix = potential.Member.Suffix ?? "";
|
||||
|
||||
@@ -62,7 +65,7 @@ namespace PluralKit.Bot
|
||||
}
|
||||
|
||||
public async Task HandleMessageAsync(IMessage message) {
|
||||
var results = await _connection.QueryAsync<PKMember, PKSystem, ProxyDatabaseResult>("select members.*, systems.* from members, systems, accounts where members.system = systems.id and accounts.system = systems.id and accounts.uid = @Uid and (members.prefix != null or members.suffix != null)", (member, system) => new ProxyDatabaseResult { Member = member, System = system }, new { Uid = message.Author.Id });
|
||||
var results = await _connection.QueryAsync<PKMember, PKSystem, ProxyDatabaseResult>("select members.*, systems.* from members, systems, accounts where members.system = systems.id and accounts.system = systems.id and accounts.uid = @Uid", (member, system) => new ProxyDatabaseResult { Member = member, System = system }, new { Uid = message.Author.Id });
|
||||
|
||||
// Find a member with proxy tags matching the message
|
||||
var match = GetProxyTagMatch(message.Content, results);
|
||||
@@ -105,7 +108,7 @@ namespace PluralKit.Bot
|
||||
if (storedMessage == null) return; // (if we can't, that's ok, no worries)
|
||||
|
||||
// Make sure it's the actual sender of that message deleting the message
|
||||
if (storedMessage.SenderId != reaction.UserId) return;
|
||||
if (storedMessage.Message.Sender != reaction.UserId) return;
|
||||
|
||||
try {
|
||||
// Then, fetch the Discord message and delete that
|
||||
|
Reference in New Issue
Block a user