discord.zig/src/test.zig
2024-12-04 20:28:36 -05:00

46 lines
1.6 KiB
Zig

const Discord = @import("discord.zig");
const Shard = Discord.Shard;
const Internal = Discord.Internal;
const FetchReq = Discord.FetchReq;
const Intents = Discord.Intents;
const Thread = std.Thread;
const std = @import("std");
const fmt = std.fmt;
fn ready(_: *Shard, payload: Discord.Ready) !void {
std.debug.print("logged in as {s}\n", .{payload.user.username});
}
fn message_create(session: *Shard, message: Discord.Message) fmt.AllocPrintError!void {
std.debug.print("captured: {?s} send by {s}\n", .{ message.content, message.author.username });
if (message.content) |mc| if (std.ascii.eqlIgnoreCase(mc, "!hi")) {
var req = FetchReq.init(session.allocator, session.details.token);
defer req.deinit();
const payload: Discord.Partial(Discord.CreateMessage) = .{ .content = "Hi, I'm hang man, your personal assistant" };
const json = std.json.stringifyAlloc(session.allocator, payload, .{}) catch unreachable;
defer session.allocator.free(json);
const path = try fmt.allocPrint(session.allocator, "/channels/{d}/messages", .{message.channel_id.into()});
_ = req.makeRequest(.POST, path, json) catch unreachable;
};
}
pub fn main() !void {
var tsa = std.heap.ThreadSafeAllocator{ .child_allocator = std.heap.c_allocator };
var handler = Discord.init(tsa.allocator());
try handler.start(.{
.token = std.posix.getenv("DISCORD_TOKEN") orelse unreachable,
.intents = Intents.fromRaw(37379),
.run = .{
.message_create = &message_create,
.ready = &ready,
},
.log = .yes,
.options = .{},
});
errdefer handler.deinit();
}