Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[@types/hubot] Update the declaration for users() to bring it up to date for Hubot v11 #69394

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion types/hubot-slack/hubot-extension.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ListenerCallback, Message } from "hubot";
import { SlackBot } from ".";
import { SlackBot } from "./index.js";

declare module "hubot" {
interface Robot {
Expand Down
2 changes: 1 addition & 1 deletion types/hubot-slack/hubot-slack-tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ brain.remove("test"); // $ExpectType Brain<SlackBot>
brain.setAutoSave(false); // $ExpectType void
brain.resetSaveInterval(15); // $ExpectType void
brain.mergeData({ foo: "bar" }); // $ExpectType void
brain.users(); // $ExpectType User[]
brain.users(); // $ExpectType any
brain.userForId("123"); // $ExpectType User
brain.userForName("jon"); // $ExpectType User | null
brain.usersForRawFuzzyName("fuzzy"); // $ExpectType User[]
Expand Down
202 changes: 98 additions & 104 deletions types/hubot-slack/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,117 +10,111 @@ import {
} from "@slack/web-api";
import { Adapter, Envelope, Message, Robot, TextMessage, User as HubotUser } from "hubot";

declare namespace HubotSlack {
class SlackBot extends Adapter {
client: SlackClient;
constructor(robot: Robot, options: any);
run(): void;
send(envelope: Envelope, ...messages: string[] | ChatPostMessageArguments[]): void;
reply(envelope: Envelope, ...messages: string[] | ChatPostMessageArguments[]): void;
setTopic(envelope: Envelope, topic: string): Promise<ConversationsInfoResponse>;
private open(): void;
private authenticated(identity: WebAPICallResult): void;
private presenceSub(): void;
close(): void;
private disconnect(): void;
private error(err: unknown): void;
private eventHandler(event: MessageMetadata["event_payload"]): Promise<void>;
private usersLoaded(err, res): void;
}

class ReactionMessage extends Message {
constructor(
type: string,
user: HubotUser,
reaction: string,
item_user: string,
item: { type: "message"; channel: string; ts: string },
event_ts: string,
);
}
export class SlackBot extends Adapter {
client: SlackClient;
constructor(robot: Robot, options: any);
run(): void;
send(envelope: Envelope, ...messages: string[] | ChatPostMessageArguments[]): void;
reply(envelope: Envelope, ...messages: string[] | ChatPostMessageArguments[]): void;
setTopic(envelope: Envelope, topic: string): Promise<ConversationsInfoResponse>;
private open(): void;
private authenticated(identity: WebAPICallResult): void;
private presenceSub(): void;
close(): void;
private disconnect(): void;
private error(err: unknown): void;
private eventHandler(event: MessageMetadata["event_payload"]): Promise<void>;
private usersLoaded(err, res): void;
}

class FileSharedMessage extends Message {
constructor(user: HubotUser, file_id: string, event_ts: string);
}
export class ReactionMessage extends Message {
constructor(
type: string,
user: HubotUser,
reaction: string,
item_user: string,
item: { type: "message"; channel: string; ts: string },
event_ts: string,
);
}

class MeMessage extends TextMessage {
constructor(user: HubotUser, text: string, event_ts: string);
}
export class FileSharedMessage extends Message {
constructor(user: HubotUser, file_id: string, event_ts: string);
}

class PresenceMessage extends Message {
constructor(users: HubotUser[], presence: string);
}
export class MeMessage extends TextMessage {
constructor(user: HubotUser, text: string, event_ts: string);
}

interface RawSlackMessage {
text: string;
ts: string;
thread_ts: string;
attachments: MessageAttachment[];
}
export class PresenceMessage extends Message {
constructor(users: HubotUser[], presence: string);
}

class SlackTextMessage extends TextMessage {
MESSAGE_REGEX: RegExp;
MESSAGE_RESERVED_KEYWORDS: string[];
constructor(
user: HubotUser,
text: string | undefined,
rawText: string | undefined,
rawMessage: RawSlackMessage,
reaction: string,
item_user: string,
item: { type: "message"; channel: string; ts: string },
event_ts: string,
);
private buildText(client: SlackClient, callback: (error: unknown, result: any) => void): void;
private replaceLinks(client: SlackClient, text: string): Promise<string>;
private replaceUser(client: SlackClient, id: string, mentions: SlackMention[]): Promise<string>;
private replaceConversation(client: SlackClient, id: string, mentions: SlackMention[]): Promise<string>;
makeSlackTextMessage(
user: HubotUser,
text: string | undefined,
rawText: string | undefined,
rawMessage: RawSlackMessage,
channel_id: string,
robot_name: string,
robot_alias: string,
client: SlackClient,
cb: (result: unknown | SlackTextMessage) => void,
): SlackTextMessage;
}
export interface RawSlackMessage {
text: string;
ts: string;
thread_ts: string;
attachments: MessageAttachment[];
}

class SlackClient {
// `@` can't be used as a property in TypeScript, so we use `at` instead.
private atCONVERSATION_CACHE_TTL_MS: number;
private eventHandler: Promise<WebAPICallResult>;
constructor(options: any, robot: Robot);
connect(): Promise<WebAPICallResult>;
onEvent(eventHandler: Promise<WebAPICallResult>): void;
disconnect(): void;
setTopic(conversationId: string, topic: string): Promise<ConversationsInfoResponse>;
send(envelope: Envelope, strings: string | ChatPostMessageArguments): void;
loadUsers(callback: (error: unknown | null, results: UsersListResponse["members"]) => void): void;
fetchUser(userId: string): Promise<UsersInfoResponse["user"]>;
fetchBotUser(botId: string): Promise<BotsInfoResponse["bot"]>;
fetchConversation(conversationId: string): Promise<ConversationsInfoResponse>;
private updateUserInBrain(
eventOrUser: { type: "user_change"; user: UsersInfoResponse["user"] } | UsersInfoResponse["user"],
): void;
private eventWrapper(event: MessageMetadata["event_payload"]): Promise<void>;
}
export class SlackTextMessage extends TextMessage {
MESSAGE_REGEX: RegExp;
MESSAGE_RESERVED_KEYWORDS: string[];
constructor(
user: HubotUser,
text: string | undefined,
rawText: string | undefined,
rawMessage: RawSlackMessage,
reaction: string,
item_user: string,
item: { type: "message"; channel: string; ts: string },
event_ts: string,
);
private buildText(client: SlackClient, callback: (error: unknown, result: any) => void): void;
private replaceLinks(client: SlackClient, text: string): Promise<string>;
private replaceUser(client: SlackClient, id: string, mentions: SlackMention[]): Promise<string>;
private replaceConversation(client: SlackClient, id: string, mentions: SlackMention[]): Promise<string>;
makeSlackTextMessage(
user: HubotUser,
text: string | undefined,
rawText: string | undefined,
rawMessage: RawSlackMessage,
channel_id: string,
robot_name: string,
robot_alias: string,
client: SlackClient,
cb: (result: unknown | SlackTextMessage) => void,
): SlackTextMessage;
}

class SlackFormatter {
constructor(dataStore: any, robot: Robot);
links(text: string): string;
flatten(message: Message): string;
incoming(message: Message): string;
warnForDeprecation(): void;
}
export class SlackClient {
// `@` can't be used as a property in TypeScript, so we use `at` instead.
private atCONVERSATION_CACHE_TTL_MS: number;
private eventHandler: Promise<WebAPICallResult>;
constructor(options: any, robot: Robot);
connect(): Promise<WebAPICallResult>;
onEvent(eventHandler: Promise<WebAPICallResult>): void;
disconnect(): void;
setTopic(conversationId: string, topic: string): Promise<ConversationsInfoResponse>;
send(envelope: Envelope, strings: string | ChatPostMessageArguments): void;
loadUsers(callback: (error: unknown | null, results: UsersListResponse["members"]) => void): void;
fetchUser(userId: string): Promise<UsersInfoResponse["user"]>;
fetchBotUser(botId: string): Promise<BotsInfoResponse["bot"]>;
fetchConversation(conversationId: string): Promise<ConversationsInfoResponse>;
private updateUserInBrain(
eventOrUser: { type: "user_change"; user: UsersInfoResponse["user"] } | UsersInfoResponse["user"],
): void;
private eventWrapper(event: MessageMetadata["event_payload"]): Promise<void>;
}

class SlackMention {
constructor(id: string, type: "user" | "conversation", info?: any);
}
export class SlackFormatter {
constructor(dataStore: any, robot: Robot);
links(text: string): string;
flatten(message: Message): string;
incoming(message: Message): string;
warnForDeprecation(): void;
}

// eslint-disable-next-line @definitelytyped/export-just-namespace
export = HubotSlack;
export as namespace HubotSlack;
export class SlackMention {
constructor(id: string, type: "user" | "conversation", info?: any);
}
2 changes: 2 additions & 0 deletions types/hubot-slack/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"projects": [
"https://github.com/slackapi/hubot-slack"
],
"type": "module",
"dependencies": {
"@slack/rtm-api": "*",
"@slack/web-api": "*",
Expand All @@ -14,5 +15,6 @@
"devDependencies": {
"@types/hubot-slack": "workspace:."
},
"type": "module",
"owners": []
}
3 changes: 2 additions & 1 deletion types/hubot/hubot-tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ brain.remove("test"); // $ExpectType Brain<Adapter>
brain.setAutoSave(false); // $ExpectType void
brain.resetSaveInterval(15); // $ExpectType void
brain.mergeData({ foo: "bar" }); // $ExpectType void
brain.users(); // $ExpectType User[]
brain.users(); // $ExpectType any
robot.adapter.users(); // $ExpectType any
brain.userForId("123"); // $ExpectType User
brain.userForName("jon"); // $ExpectType User | null
brain.usersForRawFuzzyName("fuzzy"); // $ExpectType User[]
Expand Down