UNPKG

discord-mudlet-map

Version:

This little library helps with Discord bot configuration to provide small Mudlet map fragment images with given location.

81 lines 2.95 kB
import { PngBytesExporter } from "mudlet-map-renderer"; const defaultMessageCreator = (key, area) => `${key} - ${area.areaName}`; export default function mapCommand(config) { return async (message) => { const channel = message.channel; if (!("send" in channel)) return; for (const key of Object.keys(config)) { const element = config[key]; element.renderArea = element.renderArea ?? false; const reader = element.reader; if (!reader) continue; const extracted = element.locationExtractor(message.content, reader); if (!extracted) continue; const textOnly = !element.provider && !element.mapRenderer; if (!element.mapRenderer && !textOnly) { await channel.send(`${key} - map not ready`); continue; } const roomId = Number(extracted); let room; let area; try { room = reader.getRoom(roomId); area = reader.getArea(room.area); } catch { await channel.send(`${key} - no location ID`); continue; } if (!room || !area) { await channel.send(`${key} - no location ID`); continue; } const areaInfo = { areaName: area.getAreaName(), areaId: area.getAreaId(), }; const content = (element.messageCreator ?? defaultMessageCreator)(key, areaInfo, room); if (textOnly) { try { await channel.send({ content }); } catch (err) { console.log(err); } continue; } try { const renderer = element.mapRenderer; renderer.drawArea(room.area, room.z); const bytes = renderer.export(new PngBytesExporter({ width: 1200, height: 1200, roomId: element.renderArea ? undefined : roomId, padding: element.renderArea ? 3 : 10, overlays: { position: { roomId } }, })); if (!bytes) { console.log(`${key} - PNG export returned empty buffer`); continue; } await channel.send({ content, files: [ { attachment: Buffer.from(bytes), name: `${key} - ${roomId}.png`, }, ], }); } catch (err) { console.log(err); } } }; } //# sourceMappingURL=message-create.js.map