83 lines
1.8 KiB
TypeScript
83 lines
1.8 KiB
TypeScript
import * as plugins from './slack.plugins';
|
|
import { SlackAccount } from './slack.classes.slackme';
|
|
|
|
export interface IAttachmentField {
|
|
title: string;
|
|
value: string;
|
|
short?: boolean;
|
|
}
|
|
|
|
export interface IMessageOptions {
|
|
/**
|
|
* "Required plain-text summary of the attachment."
|
|
*/
|
|
fallback?: string;
|
|
/**
|
|
* a side color
|
|
*/
|
|
color?: string;
|
|
/**
|
|
* a message to show above
|
|
*/
|
|
pretext?: string;
|
|
/**
|
|
* author name of the attachment
|
|
*/
|
|
author_name?: string;
|
|
/**
|
|
* a link to the author
|
|
*/
|
|
author_link?: string;
|
|
/**
|
|
* a string to the author
|
|
*/
|
|
author_icon?: string;
|
|
/**
|
|
* a title for the attachment
|
|
*/
|
|
title?: string;
|
|
/**
|
|
* a link for the title
|
|
*/
|
|
title_link?: string;
|
|
/**
|
|
* the main text of the message
|
|
*/
|
|
text?: string;
|
|
fields?: IAttachmentField[];
|
|
image_url?: string;
|
|
thumb_url?: string;
|
|
footer?: string;
|
|
footer_icon?: string;
|
|
ts?: number;
|
|
}
|
|
|
|
export class SlackMessage {
|
|
slackmeRef: SlackAccount;
|
|
messageOptions: IMessageOptions;
|
|
channel: string;
|
|
ts: string;
|
|
constructor(messageOptionsArg: IMessageOptions, slackmeArg?: SlackAccount) {
|
|
if (slackmeArg) {
|
|
this.slackmeRef = slackmeArg;
|
|
}
|
|
this.messageOptions = messageOptionsArg;
|
|
}
|
|
|
|
async updateAndSend(messageOptionsArg: IMessageOptions) {
|
|
this.messageOptions = messageOptionsArg;
|
|
await this.sendToRoom(this.channel);
|
|
}
|
|
|
|
async sendToRoom(roomNameArg: string) {
|
|
this.channel = roomNameArg;
|
|
if (this.slackmeRef) {
|
|
const response = await this.slackmeRef.sendMessage(this.messageOptions, roomNameArg, this.ts);
|
|
this.ts = response.body.message.ts;
|
|
this.channel = response.body.channel;
|
|
} else {
|
|
throw new Error('you need to set a slackRef before sending the message!');
|
|
}
|
|
}
|
|
}
|