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 {
switch (message) {
.PRIVMSG => |msg| {
std.log.debug("received message: nick {?s}, user: {?s}, host: {?s}, targets: {s}, text: {s}", .{
msg.prefix.?.nick,
msg.prefix.?.user,
msg.prefix.?.host,
msg.targets,
msg.text,
});
std.log.debug(
"received message: nick {?s}, user: {?s}, host: {?s}, targets: {s}, text: {s}",
.{ msg.prefix.?.nick, msg.prefix.?.user, msg.prefix.?.host, msg.targets, msg.text },
);
const nick = if (msg.prefix) |prefix| if (prefix.nick) |nick| nick else "unknown" else "unknown";
if (BotCommand.parse(nick, msg.text)) |command| {
return self.bot.execute(&command, msg.prefix, msg.targets) catch |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 (BotCommand.parse(nick, msg.text)) |cmd| {
return self.bot.execute(&cmd, msg.prefix, msg.targets) catch |err| return report_error(err);
}
if (AdminCommand.parse(msg.text)) |command| {
return self.bot.execute_admin(&command, msg.prefix, "#eru-admin") catch |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)) |cmd| {
return self.bot.execute_admin(&cmd, msg.prefix, "#eru-admin") catch |err| return report_error(err);
}
self.bot.hear(BotMessage.new_owned(
const bot_msg = BotMessage.init_owned(
self.allocator,
std.time.timestamp(),
msg.prefix.?.nick orelse "unknown",
nick,
msg.targets,
msg.text,
) catch |err| {
const error_msg = switch (err) {
Error.OutOfMemory => "eru failed to listen to a message with error: no memory",
else => unreachable,
};
return zircon.Message{
.PRIVMSG = .{ .targets = "jassob", .text = error_msg },
};
});
) catch |err| return report_error(err);
self.bot.hear(&bot_msg);
return null;
},
.JOIN => |msg| {
std.log.debug("received join message: channels {s}", .{msg.channels});
return null;
},
else => {
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 {