46 lines
1.6 KiB
Zig
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();
|
|
}
|