Skip to content

Commit

Permalink
Merge b055ac4 into 3077c40
Browse files Browse the repository at this point in the history
  • Loading branch information
M1kep authored Oct 29, 2021
2 parents 3077c40 + b055ac4 commit a6e8bdf
Showing 1 changed file with 41 additions and 5 deletions.
46 changes: 41 additions & 5 deletions src/App.ts
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,9 @@ export interface ExtendedErrorHandler {
export interface AnyErrorHandler extends ErrorHandler, ExtendedErrorHandler {
}

// Used only in this file
type MessageEventMiddleware = Middleware<SlackEventMiddlewareArgs<'message'>>;

class WebClientPool {
private pool: { [token: string]: WebClient } = {};

Expand Down Expand Up @@ -541,11 +544,44 @@ export default class App {
] as Middleware<AnyMiddlewareArgs>[]);
}

// TODO: just make a type alias for Middleware<SlackEventMiddlewareArgs<'message'>>
// TODO: maybe remove the first two overloads
public message(...listeners: Middleware<SlackEventMiddlewareArgs<'message'>>[]): void;
public message(pattern: string | RegExp, ...listeners: Middleware<SlackEventMiddlewareArgs<'message'>>[]): void;
public message(...patternsOrMiddleware: (string | RegExp | Middleware<SlackEventMiddlewareArgs<'message'>>)[]): void {
/**
*
* @param listeners Middlewares that process and react to a message event
*/
public message(...listeners: MessageEventMiddleware[]): void;
/**
*
* @param pattern Used for filtering out messages that don't match.
* Strings match via {@link String.prototype.includes}.
* @param listeners Middlewares that process and react to the message events that matched the provided patterns.
*/
public message(pattern: string | RegExp, ...listeners: MessageEventMiddleware[]): void;
/**
*
* @param filter Middleware that can filter out messages. Generally this is done by returning before
* calling {@link AllMiddlewareArgs.next} if there is no match. See {@link directMention} for an example.
* @param pattern Used for filtering out messages that don't match the pattern. Strings match
* via {@link String.prototype.includes}.
* @param listeners Middlewares that process and react to the message events that matched the provided patterns.
*/
public message(
filter: MessageEventMiddleware, pattern: string | RegExp, ...listeners: MessageEventMiddleware[]
): void;
/**
*
* @param filter Middleware that can filter out messages. Generally this is done by returning before calling
* {@link AllMiddlewareArgs.next} if there is no match. See {@link directMention} for an example.
* @param listeners Middlewares that process and react to the message events that matched the provided patterns.
*/
public message(filter: MessageEventMiddleware, ...listeners: MessageEventMiddleware[]): void;
/**
* This allows for further control of the filtering and response logic. Patterns and middlewares are processed in
* the order provided. If any patterns do not match, or a middleware does not call {@link AllMiddlewareArgs.next},
* all remaining patterns and middlewares will be skipped.
* @param patternsOrMiddleware A mix of patterns and/or middlewares.
*/
public message(...patternsOrMiddleware: (string | RegExp | MessageEventMiddleware)[]): void;
public message(...patternsOrMiddleware: (string | RegExp | MessageEventMiddleware)[]): void {
const messageMiddleware = patternsOrMiddleware.map((patternOrMiddleware) => {
if (typeof patternOrMiddleware === 'string' || util.types.isRegExp(patternOrMiddleware)) {
return matchMessage(patternOrMiddleware);
Expand Down

0 comments on commit a6e8bdf

Please sign in to comment.