tgsnake
Version:
Telegram MTProto framework for nodejs.
353 lines (352 loc) • 14.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatMemberBanned = exports.ChatMemberLeft = exports.ChatMemberRestricted = exports.ChatMemberMember = exports.ChatMemberAdministrator = exports.ChatMemberOwner = exports.ChatMemberUpdated = void 0;
exports.ChatMember = ChatMember;
const TL_js_1 = require("../TL.js");
const platform_node_js_1 = require("../../platform.node.js");
const Utilities_js_1 = require("../../Utilities.js");
const User_js_1 = require("../Advanced/User.js");
const Chat_js_1 = require("../Advanced/Chat.js");
class ChatMemberUpdated extends TL_js_1.TLObject {
chat;
from;
date;
viaChatFolderInviteLink;
oldChatMember;
newChatMember;
inviteLink;
constructor({ chat, from, date, viaChatFolderInviteLink, oldChatMember, newChatMember, inviteLink, }, client) {
super(client);
this.chat = chat;
this.from = from;
this.date = date;
this.oldChatMember = oldChatMember;
this.newChatMember = newChatMember;
this.viaChatFolderInviteLink = viaChatFolderInviteLink;
this.inviteLink = inviteLink;
}
static parse(client, update, chats, users) {
if (update instanceof platform_node_js_1.Raw.UpdateChatParticipant) {
const chat = Chat_js_1.Chat.parseChat(client, chats.find((c) => c.id === update.chatId));
const user = User_js_1.User.parse(client, users.find((u) => u.id === update.userId));
return new ChatMemberUpdated({
chat: chat,
from: user,
date: new Date(update.date * 1000),
oldChatMember: ChatMember(client, users, update.prevParticipant),
newChatMember: ChatMember(client, users, update.newParticipant),
viaChatFolderInviteLink: false,
inviteLink: update.invite?.link,
}, client);
}
const chat = Chat_js_1.Chat.parseChannel(client, chats.find((c) => c.id === update.channelId));
const user = User_js_1.User.parse(client, users.find((u) => u.id === update.userId));
return new ChatMemberUpdated({
chat: chat,
from: user,
date: new Date(update.date * 1000),
oldChatMember: ChatMember(client, users, update.prevParticipant),
newChatMember: ChatMember(client, users, update.newParticipant),
viaChatFolderInviteLink: update.viaChatlist ?? false,
inviteLink: update.invite?.link,
}, client);
}
}
exports.ChatMemberUpdated = ChatMemberUpdated;
class ChatMemberOwner extends TL_js_1.TLObject {
status;
user;
isAnonymous;
customTitle;
constructor({ status, user, isAnonymous, customTitle }, client) {
super(client);
this.status = status;
this.user = user;
this.isAnonymous = isAnonymous;
this.customTitle = customTitle;
}
static parse(client, member, users) {
if (member instanceof platform_node_js_1.Raw.ChatParticipantCreator) {
const user = User_js_1.User.parse(client, users.find((u) => u.id === member.userId));
return new ChatMemberOwner({
status: 'creator',
isAnonymous: false,
user: user,
}, client);
}
const user = User_js_1.User.parse(client, users.find((u) => u.id === member.userId));
return new ChatMemberOwner({
status: 'creator',
user: user,
customTitle: member.rank,
isAnonymous: member.adminRights.anonymous || false,
}, client);
}
}
exports.ChatMemberOwner = ChatMemberOwner;
class ChatMemberAdministrator extends TL_js_1.TLObject {
status;
user;
canBeEdited;
isAnonymous;
canManageChat;
canDeleteMessages;
canRestrictMembers;
canManageVideoChats;
canPromoteMembers;
canChangeInfo;
canInviteUsers;
joinedDate;
canPostMessages;
canEditMessages;
canPinMessages;
canManageTopics;
customTitle;
constructor({ status, user, canBeEdited, isAnonymous, canManageChat, canDeleteMessages, canRestrictMembers, canManageVideoChats, canPromoteMembers, canChangeInfo, canInviteUsers, joinedDate, canPostMessages, canEditMessages, canPinMessages, canManageTopics, customTitle, }, client) {
super(client);
this.status = status;
this.user = user;
this.canBeEdited = canBeEdited;
this.isAnonymous = isAnonymous;
this.canManageChat = canManageChat;
this.canDeleteMessages = canDeleteMessages;
this.canRestrictMembers = canRestrictMembers;
this.canManageVideoChats = canManageVideoChats;
this.canPromoteMembers = canPromoteMembers;
this.canChangeInfo = canChangeInfo;
this.canInviteUsers = canInviteUsers;
this.joinedDate = joinedDate;
this.canPostMessages = canPostMessages;
this.canEditMessages = canEditMessages;
this.canPinMessages = canPinMessages;
this.canManageTopics = canManageTopics;
this.customTitle = customTitle;
}
static parse(client, member, users) {
if (member instanceof platform_node_js_1.Raw.ChatParticipantAdmin) {
const user = User_js_1.User.parse(client, users.find((u) => u.id === member.userId));
return new ChatMemberAdministrator({
status: 'administrator',
user: user,
canBeEdited: true,
isAnonymous: false,
canManageChat: true,
canDeleteMessages: true,
canRestrictMembers: true,
canManageVideoChats: true,
canPromoteMembers: true,
canChangeInfo: true,
canInviteUsers: true,
joinedDate: new Date(member.date * 1000),
}, client);
}
const user = User_js_1.User.parse(client, users.find((u) => u.id === member.userId));
return new ChatMemberAdministrator({
status: 'administrator',
user: user,
canBeEdited: member.canEdit ?? true,
isAnonymous: member.adminRights.anonymous ??
false,
canManageChat: member.adminRights.other ??
true,
canDeleteMessages: member.adminRights
.deleteMessages ?? true,
canRestrictMembers: member.adminRights.banUsers ??
true,
canManageVideoChats: member.adminRights.manageCall ??
true,
canPromoteMembers: member.adminRights.addAdmins ??
true,
canChangeInfo: member.adminRights.changeInfo ??
true,
canInviteUsers: member.adminRights
.inviteUsers ?? true,
joinedDate: new Date(member.date * 1000),
canPostMessages: member.adminRights.postMessages,
canEditMessages: member.adminRights.editMessages,
canPinMessages: member.adminRights
.pinMessages,
canManageTopics: member.adminRights.manageTopics,
customTitle: member.rank,
}, client);
}
}
exports.ChatMemberAdministrator = ChatMemberAdministrator;
class ChatMemberMember extends TL_js_1.TLObject {
status;
user;
joinedDate;
constructor({ status, user, joinedDate }, client) {
super(client);
this.status = status;
this.user = user;
this.joinedDate = joinedDate;
}
static parse(client, member, users) {
if (member instanceof platform_node_js_1.Raw.ChatParticipant) {
const user = User_js_1.User.parse(client, users.find((u) => u.id === member.userId));
return new ChatMemberMember({
status: 'member',
user: user,
joinedDate: new Date(member.date * 1000),
}, client);
}
if (member instanceof platform_node_js_1.Raw.ChannelParticipantSelf) {
const user = User_js_1.User.parse(client, users.find((u) => u.id === member.userId));
return new ChatMemberMember({
status: 'member',
user: user,
joinedDate: new Date(member.date * 1000),
}, client);
}
const user = User_js_1.User.parse(client, users.find((u) => u.id === member.userId));
return new ChatMemberMember({
status: 'member',
user: user,
joinedDate: new Date(member.date * 1000),
}, client);
}
}
exports.ChatMemberMember = ChatMemberMember;
class ChatMemberRestricted extends TL_js_1.TLObject {
status;
user;
isMember;
canSendMessages;
canSendAudios;
canSendDocument;
canSendPhotos;
canSendVideos;
canSendVideoNotes;
canSendVoiceNotes;
canSendPolls;
canSendOtherMessages;
canAddWebPagePreviews;
canChangeInfo;
canInviteUsers;
canPinMessages;
canManageTopics;
untilDate;
joinedDate;
constructor({ status, user, isMember, canSendMessages, canSendAudios, canSendDocument, canSendPhotos, canSendVideos, canSendVideoNotes, canSendVoiceNotes, canSendPolls, canSendOtherMessages, canAddWebPagePreviews, canChangeInfo, canInviteUsers, canPinMessages, canManageTopics, untilDate, joinedDate, }, client) {
super(client);
this.status = status;
this.user = user;
this.isMember = isMember;
this.canSendMessages = canSendMessages;
this.canSendAudios = canSendAudios;
this.canSendDocument = canSendDocument;
this.canSendPhotos = canSendPhotos;
this.canSendVideos = canSendVideos;
this.canSendVideoNotes = canSendVideoNotes;
this.canSendVoiceNotes = canSendVoiceNotes;
this.canSendPolls = canSendPolls;
this.canSendOtherMessages = canSendOtherMessages;
this.canAddWebPagePreviews = canAddWebPagePreviews;
this.canChangeInfo = canChangeInfo;
this.canInviteUsers = canInviteUsers;
this.canPinMessages = canPinMessages;
this.canManageTopics = canManageTopics;
this.untilDate = untilDate;
this.joinedDate = joinedDate;
}
static parse(client, member, users) {
const uid = (0, Utilities_js_1.getId)(member.peer) ?? BigInt(0);
const user = User_js_1.User.parse(client, users.find((u) => u.id === uid));
return new ChatMemberRestricted({
status: 'restricted',
user: user,
isMember: Boolean(!member.left),
canSendMessages: Boolean(!member.bannedRights.sendMessages),
canSendAudios: Boolean(!member.bannedRights.sendMedia && !member.bannedRights.sendAudios),
canSendDocument: Boolean(!member.bannedRights.sendMedia && !member.bannedRights.sendDocs),
canSendPhotos: Boolean(!member.bannedRights.sendMedia && !member.bannedRights.sendPhotos),
canSendVideos: Boolean(!member.bannedRights.sendMedia && !member.bannedRights.sendVideos),
canSendVideoNotes: Boolean(!member.bannedRights.sendMedia && !member.bannedRights.sendRoundvideos),
canSendVoiceNotes: Boolean(!member.bannedRights.sendMedia && !member.bannedRights.sendVoices),
canSendPolls: Boolean(!member.bannedRights.sendMedia && !member.bannedRights.sendPolls),
canSendOtherMessages: [
Boolean(!member.bannedRights.sendMedia && !member.bannedRights.sendStickers),
Boolean(!member.bannedRights.sendMedia && !member.bannedRights.sendGifs),
Boolean(!member.bannedRights.sendInline),
Boolean(!member.bannedRights.sendGames),
].some((x) => x),
canAddWebPagePreviews: Boolean(!member.bannedRights.embedLinks),
canChangeInfo: Boolean(!member.bannedRights.changeInfo),
canInviteUsers: Boolean(!member.bannedRights.inviteUsers),
canPinMessages: Boolean(!member.bannedRights.pinMessages),
canManageTopics: Boolean(!member.bannedRights.manageTopics),
untilDate: member.bannedRights.untilDate < 30
? Infinity
: new Date(member.bannedRights.untilDate * 1000),
joinedDate: new Date(member.date * 1000),
}, client);
}
}
exports.ChatMemberRestricted = ChatMemberRestricted;
class ChatMemberLeft extends TL_js_1.TLObject {
status;
user;
constructor({ status, user }, client) {
super(client);
this.status = status;
this.user = user;
}
static parse(client, member, users) {
const uid = (0, Utilities_js_1.getId)(member.peer) ?? BigInt(0);
const user = User_js_1.User.parse(client, users.find((u) => u.id === uid));
return new ChatMemberLeft({
status: 'left',
user: user,
}, client);
}
}
exports.ChatMemberLeft = ChatMemberLeft;
class ChatMemberBanned extends TL_js_1.TLObject {
status;
user;
untilDate;
joinedDate;
constructor({ status, user, untilDate, joinedDate }, client) {
super(client);
this.status = status;
this.user = user;
this.untilDate = untilDate;
this.joinedDate = joinedDate;
}
static parse(client, member, users) {
const uid = (0, Utilities_js_1.getId)(member.peer) ?? BigInt(0);
const user = User_js_1.User.parse(client, users.find((u) => u.id === uid));
return new ChatMemberBanned({
status: member.bannedRights.viewMessages ? 'banned' : 'kicked',
user: user,
untilDate: member.bannedRights.untilDate < 30
? Infinity
: new Date(member.bannedRights.untilDate * 1000),
joinedDate: new Date(member.date * 1000),
}, client);
}
}
exports.ChatMemberBanned = ChatMemberBanned;
function ChatMember(client, users, member) {
if (member) {
if (member instanceof platform_node_js_1.Raw.ChannelParticipantCreator ||
member instanceof platform_node_js_1.Raw.ChatParticipantCreator) {
return ChatMemberOwner.parse(client, member, users);
}
if (member instanceof platform_node_js_1.Raw.ChannelParticipantAdmin ||
member instanceof platform_node_js_1.Raw.ChatParticipantAdmin) {
return ChatMemberAdministrator.parse(client, member, users);
}
if (member instanceof platform_node_js_1.Raw.ChannelParticipantLeft) {
return ChatMemberLeft.parse(client, member, users);
}
if (member instanceof platform_node_js_1.Raw.ChannelParticipantBanned) {
if (member.left) {
return ChatMemberBanned.parse(client, member, users);
}
return ChatMemberRestricted.parse(client, member, users);
}
return ChatMemberMember.parse(client, member, users);
}
}