60 lines
2.2 KiB
C#
60 lines
2.2 KiB
C#
namespace vassago.Behavior;
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Newtonsoft.Json;
|
|
using vassago.Models;
|
|
using QRCoder;
|
|
|
|
[StaticPlz]
|
|
public class QRify : Behavior
|
|
{
|
|
public override string Name => "qr-ify";
|
|
|
|
public override string Trigger => "!qrplz";
|
|
|
|
public override string Description => "generate text QR codes";
|
|
|
|
public override bool ShouldAct(Message message)
|
|
{
|
|
if(message.Channel.EffectivePermissions.MaxAttachmentBytes < 1024)
|
|
return false;
|
|
return base.ShouldAct(message);
|
|
}
|
|
|
|
public override async Task<bool> ActOn(Message message)
|
|
{
|
|
var qrContent = message.Content.Substring($"{Trigger} ".Length + message.Content.IndexOf(Trigger));
|
|
Console.WriteLine($"qring: {qrContent}");
|
|
QRCodeGenerator qrGenerator = new QRCodeGenerator();
|
|
QRCodeData qrCodeData = qrGenerator.CreateQrCode(qrContent, QRCodeGenerator.ECCLevel.Q);
|
|
SvgQRCode qrCode = new SvgQRCode(qrCodeData);
|
|
string qrCodeAsSvg = qrCode.GetGraphic(20);
|
|
int todaysnumber = Shared.r.Next();
|
|
if (!Directory.Exists("tmp"))
|
|
{
|
|
Directory.CreateDirectory("tmp");
|
|
}
|
|
File.WriteAllText($"tmp/qr{todaysnumber}.svg", qrCodeAsSvg);
|
|
if (ExternalProcess.GoPlz("convert", $"tmp/qr{todaysnumber}.svg tmp/qr{todaysnumber}.png"))
|
|
{
|
|
if(message.Channel.EffectivePermissions.MaxAttachmentBytes >= (ulong)(new System.IO.FileInfo($"tmp/qr{todaysnumber}.png").Length))
|
|
await message.Channel.SendFile($"tmp/qr{todaysnumber}.png", null);
|
|
else
|
|
await message.Channel.SendMessage($"resulting qr image 2 big 4 here ({(ulong)(new System.IO.FileInfo($"tmp/qr{todaysnumber}.png").Length)} / {message.Channel.EffectivePermissions.MaxAttachmentBytes})");
|
|
File.Delete($"tmp/qr{todaysnumber}.svg");
|
|
File.Delete($"tmp/qr{todaysnumber}.png");
|
|
}
|
|
else
|
|
{
|
|
await message.Channel.SendMessage("convert failed :( aaaaaaadam!");
|
|
Console.Error.WriteLine($"convert failed :( qr{todaysnumber}");
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
} |