Make it possible to create quotes from message links
This commit is contained in:
parent
7942308059
commit
ad086a5e0c
3 changed files with 146 additions and 2 deletions
47
src/Bot/Commands/Utils/Quote/MessageLink.cs
Normal file
47
src/Bot/Commands/Utils/Quote/MessageLink.cs
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
using System;
|
||||||
|
using System.Data;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace Geekbot.Bot.Commands.Utils.Quote
|
||||||
|
{
|
||||||
|
public class MessageLink
|
||||||
|
{
|
||||||
|
public readonly static Regex re = new Regex(
|
||||||
|
@"https:\/\/(canary|ptb)?.discord(app)?.com\/channels\/(?<GuildId>\d{16,20})\/(?<ChannelId>\d{16,20})\/(?<MessageId>\d{16,20})",
|
||||||
|
RegexOptions.Compiled | RegexOptions.IgnoreCase,
|
||||||
|
new TimeSpan(0, 0, 2));
|
||||||
|
|
||||||
|
public ulong GuildId { get; set; }
|
||||||
|
public ulong ChannelId { get; set; }
|
||||||
|
public ulong MessageId { get; set; }
|
||||||
|
|
||||||
|
public MessageLink(string url)
|
||||||
|
{
|
||||||
|
var matches = re.Matches(url);
|
||||||
|
|
||||||
|
foreach (Match match in matches)
|
||||||
|
{
|
||||||
|
foreach (Group matchGroup in match.Groups)
|
||||||
|
{
|
||||||
|
switch (matchGroup.Name)
|
||||||
|
{
|
||||||
|
case "GuildId":
|
||||||
|
GuildId = ulong.Parse(matchGroup.Value);
|
||||||
|
break;
|
||||||
|
case "ChannelId":
|
||||||
|
ChannelId = ulong.Parse(matchGroup.Value);
|
||||||
|
break;
|
||||||
|
case "MessageId":
|
||||||
|
MessageId = ulong.Parse(matchGroup.Value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsValid(string link)
|
||||||
|
{
|
||||||
|
return re.IsMatch(link);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -82,7 +82,7 @@ namespace Geekbot.Bot.Commands.Utils.Quote
|
||||||
if (lastMessage == null) return;
|
if (lastMessage == null) return;
|
||||||
|
|
||||||
var quote = CreateQuoteObject(lastMessage);
|
var quote = CreateQuoteObject(lastMessage);
|
||||||
_database.Quotes.Add(quote);
|
await _database.Quotes.AddAsync(quote);
|
||||||
await _database.SaveChangesAsync();
|
await _database.SaveChangesAsync();
|
||||||
|
|
||||||
var embed = QuoteBuilder(quote);
|
var embed = QuoteBuilder(quote);
|
||||||
|
@ -117,7 +117,61 @@ namespace Geekbot.Bot.Commands.Utils.Quote
|
||||||
}
|
}
|
||||||
|
|
||||||
var quote = CreateQuoteObject(message);
|
var quote = CreateQuoteObject(message);
|
||||||
_database.Quotes.Add(quote);
|
await _database.Quotes.AddAsync(quote);
|
||||||
|
await _database.SaveChangesAsync();
|
||||||
|
|
||||||
|
var embed = QuoteBuilder(quote);
|
||||||
|
await ReplyAsync(transContext.GetString("QuoteAdded"), false, embed.Build());
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
await _errorHandler.HandleCommandException(e, Context,
|
||||||
|
"I couldn't find a message with that id :disappointed:");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Command("add")]
|
||||||
|
[Alias("save")]
|
||||||
|
[Summary("Add a quote from a message link")]
|
||||||
|
public async Task AddQuote([Summary("message-link")] string messageLink)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var transContext = await _translationHandler.GetGuildContext(Context);
|
||||||
|
|
||||||
|
if (!MessageLink.IsValid(messageLink))
|
||||||
|
{
|
||||||
|
await ReplyAsync(transContext.GetString("NotAValidMessageLink"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var link = new MessageLink(messageLink);
|
||||||
|
if (link.GuildId != Context.Guild.Id)
|
||||||
|
{
|
||||||
|
await ReplyAsync(transContext.GetString("OnlyQuoteFromSameServer"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var channel = link.ChannelId == Context.Channel.Id
|
||||||
|
? Context.Channel
|
||||||
|
: await Context.Guild.GetTextChannelAsync(link.ChannelId);
|
||||||
|
|
||||||
|
var message = await channel.GetMessageAsync(link.MessageId);
|
||||||
|
|
||||||
|
if (message.Author.Id == Context.Message.Author.Id)
|
||||||
|
{
|
||||||
|
await ReplyAsync(transContext.GetString("CannotSaveOwnQuotes"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (message.Author.IsBot)
|
||||||
|
{
|
||||||
|
await ReplyAsync(transContext.GetString("CannotQuoteBots"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var quote = CreateQuoteObject(message);
|
||||||
|
await _database.Quotes.AddAsync(quote);
|
||||||
await _database.SaveChangesAsync();
|
await _database.SaveChangesAsync();
|
||||||
|
|
||||||
var embed = QuoteBuilder(quote);
|
var embed = QuoteBuilder(quote);
|
||||||
|
@ -167,6 +221,43 @@ namespace Geekbot.Bot.Commands.Utils.Quote
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Command("make")]
|
||||||
|
[Summary("Create a quote from a message link")]
|
||||||
|
public async Task ReturnSpecifiedQuote([Summary("message-link")] string messageLink)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var transContext = await _translationHandler.GetGuildContext(Context);
|
||||||
|
|
||||||
|
if (!MessageLink.IsValid(messageLink))
|
||||||
|
{
|
||||||
|
await ReplyAsync(transContext.GetString("NotAValidMessageLink"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var link = new MessageLink(messageLink);
|
||||||
|
if (link.GuildId != Context.Guild.Id)
|
||||||
|
{
|
||||||
|
await ReplyAsync(transContext.GetString("OnlyQuoteFromSameServer"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var channel = link.ChannelId == Context.Channel.Id
|
||||||
|
? Context.Channel
|
||||||
|
: await Context.Guild.GetTextChannelAsync(link.ChannelId);
|
||||||
|
|
||||||
|
var message = await channel.GetMessageAsync(link.MessageId);
|
||||||
|
var quote = CreateQuoteObject(message);
|
||||||
|
var embed = QuoteBuilder(quote);
|
||||||
|
await ReplyAsync("", false, embed.Build());
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
await _errorHandler.HandleCommandException(e, Context,
|
||||||
|
"I couldn't find that message :disappointed:");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[Command("remove")]
|
[Command("remove")]
|
||||||
[RequireUserPermission(GuildPermission.ManageMessages)]
|
[RequireUserPermission(GuildPermission.ManageMessages)]
|
||||||
[Summary("Remove a quote (user needs the 'ManageMessages' permission)")]
|
[Summary("Remove a quote (user needs the 'ManageMessages' permission)")]
|
||||||
|
|
|
@ -169,6 +169,12 @@ quote:
|
||||||
MostQuotesPerson:
|
MostQuotesPerson:
|
||||||
EN: "Most quoted person"
|
EN: "Most quoted person"
|
||||||
CHDE: "Meist quoteti person"
|
CHDE: "Meist quoteti person"
|
||||||
|
NotAValidMessageLink:
|
||||||
|
EN: "That is not a valid message link"
|
||||||
|
CHDE: "Das isch kei korrete nachrichtelink"
|
||||||
|
OnlyQuoteFromSameServer:
|
||||||
|
EN: "You can only quote messages from the same server"
|
||||||
|
CHDE: "Du chasch numme nachrichte vom gliche server quote"
|
||||||
rank:
|
rank:
|
||||||
InvalidType:
|
InvalidType:
|
||||||
EN: "Valid types are '`messages`' '`karma`', '`rolls`' and '`cookies`'"
|
EN: "Valid types are '`messages`' '`karma`', '`rolls`' and '`cookies`'"
|
||||||
|
|
Loading…
Reference in a new issue