diff --git a/src/main.zig b/src/main.zig index e9ea224..211d537 100644 --- a/src/main.zig +++ b/src/main.zig @@ -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 {