diff --git a/ExampleBots/MediaModeratorPoC/Bot/Commands/BanMediaCommand.cs b/ExampleBots/MediaModeratorPoC/Bot/Commands/BanMediaCommand.cs
index 4642007..d633f89 100644
--- a/ExampleBots/MediaModeratorPoC/Bot/Commands/BanMediaCommand.cs
+++ b/ExampleBots/MediaModeratorPoC/Bot/Commands/BanMediaCommand.cs
@@ -1,11 +1,11 @@
using System.Security.Cryptography;
using ArcaneLibs.Extensions;
+using LibMatrix.EventTypes.Spec;
using LibMatrix.Helpers;
using LibMatrix.Responses;
using LibMatrix.Services;
-using LibMatrix.StateEventTypes.Spec;
+using LibMatrix.Utilities.Bot.Interfaces;
using MediaModeratorPoC.Bot.AccountData;
-using MediaModeratorPoC.Bot.Interfaces;
using MediaModeratorPoC.Bot.StateEventTypes;
namespace MediaModeratorPoC.Bot.Commands;
@@ -17,11 +17,11 @@ public class BanMediaCommand(IServiceProvider services, HomeserverProviderServic
public async Task<bool> CanInvoke(CommandContext ctx) {
//check if user is admin in control room
var botData = await ctx.Homeserver.GetAccountData<BotData>("gay.rory.media_moderator_poc_data");
- var controlRoom = await ctx.Homeserver.GetRoom(botData.ControlRoom);
+ var controlRoom = ctx.Homeserver.GetRoom(botData.ControlRoom);
var isAdmin = (await controlRoom.GetPowerLevelsAsync())!.UserHasPermission(ctx.MessageEvent.Sender, "m.room.ban");
if (!isAdmin) {
// await ctx.Reply("You do not have permission to use this command!");
- await (await ctx.Homeserver.GetRoom(botData.LogRoom!)).SendMessageEventAsync("m.room.message",
+ await ctx.Homeserver.GetRoom(botData.LogRoom!).SendMessageEventAsync(
new RoomMessageEventContent(body: $"User {ctx.MessageEvent.Sender} tried to use command {Name} but does not have permission!", messageType: "m.text"));
}
@@ -30,14 +30,14 @@ public class BanMediaCommand(IServiceProvider services, HomeserverProviderServic
public async Task Invoke(CommandContext ctx) {
var botData = await ctx.Homeserver.GetAccountData<BotData>("gay.rory.media_moderator_poc_data");
- var policyRoom = await ctx.Homeserver.GetRoom(botData.PolicyRoom ?? botData.ControlRoom);
- var logRoom = await ctx.Homeserver.GetRoom(botData.LogRoom ?? botData.ControlRoom);
+ var policyRoom = ctx.Homeserver.GetRoom(botData.PolicyRoom ?? botData.ControlRoom);
+ var logRoom = ctx.Homeserver.GetRoom(botData.LogRoom ?? botData.ControlRoom);
//check if reply
var messageContent = ctx.MessageEvent.TypedContent as RoomMessageEventContent;
if (messageContent?.RelatesTo is { InReplyTo: not null }) {
try {
- await logRoom.SendMessageEventAsync("m.room.message",
+ await logRoom.SendMessageEventAsync(
new RoomMessageEventContent(
body: $"User {MessageFormatter.HtmlFormatMention(ctx.MessageEvent.Sender)} is trying to ban media {messageContent!.RelatesTo!.InReplyTo!.EventId}",
messageType: "m.text"));
@@ -47,14 +47,14 @@ public class BanMediaCommand(IServiceProvider services, HomeserverProviderServic
//check if recommendation is in list
if (ctx.Args.Length < 2) {
- await ctx.Room.SendMessageEventAsync("m.room.message", MessageFormatter.FormatError("You must specify a recommendation type and reason!"));
+ await ctx.Room.SendMessageEventAsync(MessageFormatter.FormatError("You must specify a recommendation type and reason!"));
return;
}
var recommendation = ctx.Args[0];
if (recommendation is not ("ban" or "kick" or "mute" or "redact" or "spoiler" or "warn" or "warn_admins")) {
- await ctx.Room.SendMessageEventAsync("m.room.message", MessageFormatter.FormatError($"Invalid recommendation type {recommendation}, must be `warn_admins`, `warn`, `spoiler`, `redact`, `mute`, `kick` or `ban`!"));
+ await ctx.Room.SendMessageEventAsync(MessageFormatter.FormatError($"Invalid recommendation type {recommendation}, must be `warn_admins`, `warn`, `spoiler`, `redact`, `mute`, `kick` or `ban`!"));
return;
}
@@ -69,7 +69,7 @@ public class BanMediaCommand(IServiceProvider services, HomeserverProviderServic
fileHash = await hashAlgo.ComputeHashAsync(await ctx.Homeserver._httpClient.GetStreamAsync(resolvedUri));
}
catch (Exception ex) {
- await logRoom.SendMessageEventAsync("m.room.message",
+ await logRoom.SendMessageEventAsync(
MessageFormatter.FormatException($"Error calculating file hash for {mxcUri} via {mxcUri.Split('/')[2]}, retrying via {ctx.Homeserver.HomeServerDomain}...",
ex));
try {
@@ -77,8 +77,8 @@ public class BanMediaCommand(IServiceProvider services, HomeserverProviderServic
fileHash = await hashAlgo.ComputeHashAsync(await ctx.Homeserver._httpClient.GetStreamAsync(resolvedUri));
}
catch (Exception ex2) {
- await ctx.Room.SendMessageEventAsync("m.room.message", MessageFormatter.FormatException("Error calculating file hash", ex2));
- await logRoom.SendMessageEventAsync("m.room.message",
+ await ctx.Room.SendMessageEventAsync(MessageFormatter.FormatException("Error calculating file hash", ex2));
+ await logRoom.SendMessageEventAsync(
MessageFormatter.FormatException($"Error calculating file hash via {ctx.Homeserver.HomeServerDomain}!", ex2));
}
}
@@ -91,18 +91,18 @@ public class BanMediaCommand(IServiceProvider services, HomeserverProviderServic
Recommendation = recommendation,
});
- await ctx.Room.SendMessageEventAsync("m.room.message", MessageFormatter.FormatSuccessJson("Media policy created", policy));
- await logRoom.SendMessageEventAsync("m.room.message", MessageFormatter.FormatSuccessJson("Media policy created", policy));
+ await ctx.Room.SendMessageEventAsync(MessageFormatter.FormatSuccessJson("Media policy created", policy));
+ await logRoom.SendMessageEventAsync(MessageFormatter.FormatSuccessJson("Media policy created", policy));
}
catch (Exception e) {
- await logRoom.SendMessageEventAsync("m.room.message", MessageFormatter.FormatException("Error creating policy", e));
- await ctx.Room.SendMessageEventAsync("m.room.message", MessageFormatter.FormatException("Error creating policy", e));
+ await logRoom.SendMessageEventAsync(MessageFormatter.FormatException("Error creating policy", e));
+ await ctx.Room.SendMessageEventAsync(MessageFormatter.FormatException("Error creating policy", e));
await using var stream = new MemoryStream(e.ToString().AsBytes().ToArray());
await logRoom.SendFileAsync("m.file", "error.log.cs", stream);
}
}
else {
- await ctx.Room.SendMessageEventAsync("m.room.message", MessageFormatter.FormatError("This command must be used in reply to a message!"));
+ await ctx.Room.SendMessageEventAsync(MessageFormatter.FormatError("This command must be used in reply to a message!"));
}
}
}
diff --git a/ExampleBots/MediaModeratorPoC/Bot/MediaModBot.cs b/ExampleBots/MediaModeratorPoC/Bot/MediaModBot.cs
index 7104114..e6ba269 100644
--- a/ExampleBots/MediaModeratorPoC/Bot/MediaModBot.cs
+++ b/ExampleBots/MediaModeratorPoC/Bot/MediaModBot.cs
@@ -6,14 +6,15 @@ using System.Text.Encodings.Web;
using System.Text.RegularExpressions;
using ArcaneLibs.Extensions;
using LibMatrix;
+using LibMatrix.EventTypes.Spec;
+using LibMatrix.EventTypes.Spec.State;
using LibMatrix.Helpers;
using LibMatrix.Homeservers;
using LibMatrix.Responses;
using LibMatrix.RoomTypes;
using LibMatrix.Services;
-using LibMatrix.StateEventTypes.Spec;
+using LibMatrix.Utilities.Bot.Interfaces;
using MediaModeratorPoC.Bot.AccountData;
-using MediaModeratorPoC.Bot.Interfaces;
using MediaModeratorPoC.Bot.StateEventTypes;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
@@ -86,9 +87,9 @@ public class MediaModBot(AuthenticatedHomeserverGeneric hs, ILogger<MediaModBot>
await hs.SetAccountData("gay.rory.media_moderator_poc_data", botData);
}
- _policyRoom = await hs.GetRoom(botData.PolicyRoom ?? botData.ControlRoom);
- _logRoom = await hs.GetRoom(botData.LogRoom ?? botData.ControlRoom);
- _controlRoom = await hs.GetRoom(botData.ControlRoom);
+ _policyRoom = hs.GetRoom(botData.PolicyRoom ?? botData.ControlRoom);
+ _logRoom = hs.GetRoom(botData.LogRoom ?? botData.ControlRoom);
+ _controlRoom = hs.GetRoom(botData.ControlRoom);
List<string> admins = new();
@@ -113,18 +114,18 @@ public class MediaModBot(AuthenticatedHomeserverGeneric hs, ILogger<MediaModBot>
$"Got invite to {args.Key} by {inviteEvent.Sender} with reason: {(inviteEvent.TypedContent as RoomMemberEventContent).Reason}");
if (inviteEvent.Sender.EndsWith(":rory.gay") || inviteEvent.Sender.EndsWith(":conduit.rory.gay")) {
try {
- var senderProfile = await hs.GetProfile(inviteEvent.Sender);
- await (await hs.GetRoom(args.Key)).JoinAsync(reason: $"I was invited by {senderProfile.DisplayName ?? inviteEvent.Sender}!");
+ var senderProfile = await hs.GetProfileAsync(inviteEvent.Sender);
+ await (hs.GetRoom(args.Key)).JoinAsync(reason: $"I was invited by {senderProfile.DisplayName ?? inviteEvent.Sender}!");
}
catch (Exception e) {
logger.LogError("{}", e.ToString());
- await (await hs.GetRoom(args.Key)).LeaveAsync(reason: "I was unable to join the room: " + e);
+ await (hs.GetRoom(args.Key)).LeaveAsync(reason: "I was unable to join the room: " + e);
}
}
});
hs.SyncHelper.TimelineEventHandlers.Add(async @event => {
- var room = await hs.GetRoom(@event.RoomId);
+ var room = hs.GetRoom(@event.RoomId);
try {
logger.LogInformation(
"Got timeline event in {}: {}", @event.RoomId, @event.ToJson(indent: true, ignoreNull: true));
@@ -136,7 +137,7 @@ public class MediaModBot(AuthenticatedHomeserverGeneric hs, ILogger<MediaModBot>
if (matchedPolicy is null) return;
var matchedpolicyData = matchedPolicy.TypedContent as MediaPolicyEventContent;
var recommendation = matchedpolicyData.Recommendation;
- await _logRoom.SendMessageEventAsync("m.room.message",
+ await _logRoom.SendMessageEventAsync(
new RoomMessageEventContent(
body:
$"User {MessageFormatter.HtmlFormatMention(@event.Sender)} posted an image in {MessageFormatter.HtmlFormatMention(room.RoomId)} that matched rule {matchedPolicy.StateKey}, applying action {matchedpolicyData.Recommendation}, as described in rule: {matchedPolicy.RawContent!.ToJson(ignoreNull: true)}",
@@ -147,7 +148,7 @@ public class MediaModBot(AuthenticatedHomeserverGeneric hs, ILogger<MediaModBot>
});
switch (recommendation) {
case "warn_admins": {
- await _controlRoom.SendMessageEventAsync("m.room.message",
+ await _controlRoom.SendMessageEventAsync(
new RoomMessageEventContent(
body: $"{string.Join(' ', admins)}\nUser {MessageFormatter.HtmlFormatMention(@event.Sender)} posted a banned image {message.Url}",
messageType: "m.text") {
@@ -158,7 +159,7 @@ public class MediaModBot(AuthenticatedHomeserverGeneric hs, ILogger<MediaModBot>
break;
}
case "warn": {
- await room.SendMessageEventAsync("m.room.message",
+ await room.SendMessageEventAsync(
new RoomMessageEventContent(
body: $"Please be careful when posting this image: {matchedpolicyData.Reason}",
messageType: "m.text") {
@@ -184,7 +185,7 @@ public class MediaModBot(AuthenticatedHomeserverGeneric hs, ILogger<MediaModBot>
// <img src=\"mxc://rory.gay/sLkdxUhipiQaFwRkXcPSRwdg\" height=\"69\"></a>
// </span>
// </blockquote>
- await room.SendMessageEventAsync("m.room.message",
+ await room.SendMessageEventAsync(
new RoomMessageEventContent(
body:
$"Please be careful when posting this image: {matchedpolicyData.Reason}, I have spoilered it for you:",
@@ -194,7 +195,7 @@ public class MediaModBot(AuthenticatedHomeserverGeneric hs, ILogger<MediaModBot>
$"<font color=\"#FFFF00\">Please be careful when posting this image: {matchedpolicyData.Reason}, I have spoilered it for you:</a></font>"
});
var imageUrl = message.Url;
- await room.SendMessageEventAsync("m.room.message",
+ await room.SendMessageEventAsync(
new RoomMessageEventContent(body: $"CN: {imageUrl}",
messageType: "m.text") {
Format = "org.matrix.custom.html",
@@ -244,9 +245,9 @@ public class MediaModBot(AuthenticatedHomeserverGeneric hs, ILogger<MediaModBot>
}
catch (Exception e) {
logger.LogError("{}", e.ToString());
- await _controlRoom.SendMessageEventAsync("m.room.message",
+ await _controlRoom.SendMessageEventAsync(
MessageFormatter.FormatException($"Unable to ban user in {MessageFormatter.HtmlFormatMention(room.RoomId)}", e));
- await _logRoom.SendMessageEventAsync("m.room.message",
+ await _logRoom.SendMessageEventAsync(
MessageFormatter.FormatException($"Unable to ban user in {MessageFormatter.HtmlFormatMention(room.RoomId)}", e));
await using var stream = new MemoryStream(e.ToString().AsBytes().ToArray());
await _controlRoom.SendFileAsync("m.file", "error.log.cs", stream);
@@ -274,7 +275,7 @@ public class MediaModBot(AuthenticatedHomeserverGeneric hs, ILogger<MediaModBot>
fileHash = await hashAlgo.ComputeHashAsync(await hs._httpClient.GetStreamAsync(resolvedUri));
}
catch (Exception ex) {
- await _logRoom.SendMessageEventAsync("m.room.message",
+ await _logRoom.SendMessageEventAsync(
MessageFormatter.FormatException($"Error calculating file hash for {mxcUri} via {mxcUri.Split('/')[2]} ({resolvedUri}), retrying via {hs.HomeServerDomain}...",
ex));
try {
@@ -282,7 +283,7 @@ public class MediaModBot(AuthenticatedHomeserverGeneric hs, ILogger<MediaModBot>
fileHash = await hashAlgo.ComputeHashAsync(await hs._httpClient.GetStreamAsync(resolvedUri));
}
catch (Exception ex2) {
- await _logRoom.SendMessageEventAsync("m.room.message",
+ await _logRoom.SendMessageEventAsync(
MessageFormatter.FormatException($"Error calculating file hash via {hs.HomeServerDomain} ({resolvedUri})!", ex2));
}
}
|