refactor(main.zig): move out error reporting

This commit is contained in:
Jacob Jonsson 2026-01-04 23:53:32 +01:00
parent 89c63a34c1
commit 508e084ddf
Signed by: Jassob
GPG key ID: 7E30B9B047F7202E

View file

@ -67,55 +67,45 @@ pub const BotAdapter = struct {
pub fn callback(self: *BotAdapter, message: zircon.Message) ?zircon.Message { pub fn callback(self: *BotAdapter, message: zircon.Message) ?zircon.Message {
switch (message) { switch (message) {
.PRIVMSG => |msg| { .PRIVMSG => |msg| {
std.log.debug("received message: nick {?s}, user: {?s}, host: {?s}, targets: {s}, text: {s}", .{ std.log.debug(
msg.prefix.?.nick, "received message: nick {?s}, user: {?s}, host: {?s}, targets: {s}, text: {s}",
msg.prefix.?.user, .{ msg.prefix.?.nick, msg.prefix.?.user, msg.prefix.?.host, msg.targets, msg.text },
msg.prefix.?.host, );
msg.targets,
msg.text,
});
const nick = if (msg.prefix) |prefix| if (prefix.nick) |nick| nick else "unknown" else "unknown"; const nick = if (msg.prefix) |prefix| if (prefix.nick) |nick| nick else "unknown" else "unknown";
if (BotCommand.parse(nick, msg.text)) |command| { if (BotCommand.parse(nick, msg.text)) |cmd| {
return self.bot.execute(&command, msg.prefix, msg.targets) catch |err| { return self.bot.execute(&cmd, msg.prefix, msg.targets) catch |err| return report_error(err);
const err_msg = switch (err) {
Error.NoMessage => "no matching message",
Error.OutOfMemory => "out of memory",
Error.WriteFailed => "write failed",
};
return .{ .PRIVMSG = .{ .prefix = msg.prefix, .targets = "#eru-admin", .text = err_msg } };
};
} }
if (AdminCommand.parse(msg.text)) |command| { if (AdminCommand.parse(msg.text)) |cmd| {
return self.bot.execute_admin(&command, msg.prefix, "#eru-admin") catch |err| { return self.bot.execute_admin(&cmd, msg.prefix, "#eru-admin") catch |err| return report_error(err);
const err_msg = switch (err) {
Error.NoMessage => "no matching message",
Error.OutOfMemory => "out of memory",
Error.WriteFailed => "write failed",
};
return .{ .PRIVMSG = .{ .prefix = msg.prefix, .targets = "#eru-admin", .text = err_msg } };
};
} }
self.bot.hear(BotMessage.new_owned( const bot_msg = BotMessage.init_owned(
self.allocator, self.allocator,
std.time.timestamp(), std.time.timestamp(),
msg.prefix.?.nick orelse "unknown", nick,
msg.targets, msg.targets,
msg.text, msg.text,
) catch |err| { ) catch |err| return report_error(err);
const error_msg = switch (err) { self.bot.hear(&bot_msg);
Error.OutOfMemory => "eru failed to listen to a message with error: no memory", return null;
else => unreachable, },
}; .JOIN => |msg| {
return zircon.Message{ std.log.debug("received join message: channels {s}", .{msg.channels});
.PRIVMSG = .{ .targets = "jassob", .text = error_msg }, return null;
};
});
}, },
else => { else => {
std.log.debug("received unknown message {}", .{message}); std.log.debug("received unknown message {}", .{message});
return null;
}, },
} }
return null; }
fn report_error(err: Error) zircon.Message {
const err_msg = switch (err) {
Error.NoMessage => "no matching message",
Error.OutOfMemory => "out of memory",
Error.WriteFailed => "write failed",
};
return .{ .PRIVMSG = .{ .prefix = null, .targets = "#eru-admin", .text = err_msg } };
} }
pub fn erased_callback(self: *anyopaque, message: zircon.Message) ?zircon.Message { pub fn erased_callback(self: *anyopaque, message: zircon.Message) ?zircon.Message {