chore(bot.zig): store references to messages in bot
This commit is contained in:
parent
9bebf066cf
commit
89c63a34c1
1 changed files with 21 additions and 13 deletions
34
src/bot.zig
34
src/bot.zig
|
|
@ -132,7 +132,7 @@ pub const Message = struct {
|
||||||
author: []const u8,
|
author: []const u8,
|
||||||
content: []const u8,
|
content: []const u8,
|
||||||
|
|
||||||
pub fn new_owned(allocator: std.mem.Allocator, timestamp: i64, author: []const u8, targets: []const u8, content: []const u8) Error!Message {
|
pub fn init_owned(allocator: std.mem.Allocator, timestamp: i64, author: []const u8, targets: []const u8, content: []const u8) Error!Message {
|
||||||
return .{
|
return .{
|
||||||
.timestamp = timestamp,
|
.timestamp = timestamp,
|
||||||
.targets = try allocator.dupe(u8, targets),
|
.targets = try allocator.dupe(u8, targets),
|
||||||
|
|
@ -141,7 +141,7 @@ pub const Message = struct {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn deinit(self: Message, allocator: std.mem.Allocator) void {
|
pub fn deinit(self: *const Message, allocator: std.mem.Allocator) void {
|
||||||
allocator.free(self.author);
|
allocator.free(self.author);
|
||||||
allocator.free(self.content);
|
allocator.free(self.content);
|
||||||
allocator.free(self.targets);
|
allocator.free(self.targets);
|
||||||
|
|
@ -149,7 +149,7 @@ pub const Message = struct {
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const Bot = struct {
|
pub const Bot = struct {
|
||||||
backlog: [1024]?Message,
|
backlog: [1024]?*const Message,
|
||||||
sent_messages: std.ArrayList([]u8),
|
sent_messages: std.ArrayList([]u8),
|
||||||
top: usize,
|
top: usize,
|
||||||
bottom: usize,
|
bottom: usize,
|
||||||
|
|
@ -247,7 +247,7 @@ pub const Bot = struct {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn hear(self: *Bot, msg: Message) void {
|
pub fn hear(self: *Bot, msg: *const Message) void {
|
||||||
self.backlog[self.top] = msg;
|
self.backlog[self.top] = msg;
|
||||||
self.top = (self.top + 1) % self.backlog.len;
|
self.top = (self.top + 1) % self.backlog.len;
|
||||||
if (self.top == self.bottom) {
|
if (self.top == self.bottom) {
|
||||||
|
|
@ -274,7 +274,7 @@ pub const Bot = struct {
|
||||||
return (idx - 1) % self.backlog.len;
|
return (idx - 1) % self.backlog.len;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn previous_message_by_author(self: *Bot, author: []const u8, targets: []const u8) ?Message {
|
fn previous_message_by_author(self: *Bot, author: []const u8, targets: []const u8) ?*const Message {
|
||||||
var idx = self.previous_idx(self.top);
|
var idx = self.previous_idx(self.top);
|
||||||
while (true) : (idx = self.previous_idx(idx)) {
|
while (true) : (idx = self.previous_idx(idx)) {
|
||||||
if (self.backlog[idx] == null) {
|
if (self.backlog[idx] == null) {
|
||||||
|
|
@ -297,14 +297,15 @@ test "hear_wraps" {
|
||||||
var bot = try Bot.init(std.testing.allocator);
|
var bot = try Bot.init(std.testing.allocator);
|
||||||
defer bot.deinit();
|
defer bot.deinit();
|
||||||
|
|
||||||
const testMessage = Message{
|
|
||||||
.author = "Jassob",
|
|
||||||
.timestamp = 12345,
|
|
||||||
.content = "All your codebase are belong to us.\n",
|
|
||||||
};
|
|
||||||
|
|
||||||
for (0..1025) |_| {
|
for (0..1025) |_| {
|
||||||
bot.hear(testMessage);
|
const testMessage = try Message.init_owned(
|
||||||
|
std.testing.allocator,
|
||||||
|
12345,
|
||||||
|
"jassob",
|
||||||
|
"#test",
|
||||||
|
"All your codebase are belong to us.\n",
|
||||||
|
);
|
||||||
|
bot.hear(&testMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
try std.testing.expect(bot.top == 1);
|
try std.testing.expect(bot.top == 1);
|
||||||
|
|
@ -324,7 +325,14 @@ test "execute_substitution" {
|
||||||
defer bot.deinit();
|
defer bot.deinit();
|
||||||
|
|
||||||
// hear original message with typo
|
// hear original message with typo
|
||||||
bot.hear(Message{ .timestamp = 1234, .author = "jassob", .content = "What" });
|
const msg = try Message.init_owned(
|
||||||
|
std.testing.allocator,
|
||||||
|
1234,
|
||||||
|
"jassob",
|
||||||
|
"#test",
|
||||||
|
"What",
|
||||||
|
);
|
||||||
|
bot.hear(&msg);
|
||||||
|
|
||||||
// execute substitution
|
// execute substitution
|
||||||
const cmd = Command{
|
const cmd = Command{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue