feat(client): sendLocation method

This commit is contained in:
teidesu 2021-04-10 15:23:27 +03:00
parent 0f2744b997
commit 97cbfd4840
3 changed files with 118 additions and 4 deletions

View file

@ -28,6 +28,7 @@ import { _parseEntities } from './methods/messages/parse-entities'
import { searchGlobal } from './methods/messages/search-global' import { searchGlobal } from './methods/messages/search-global'
import { searchMessages } from './methods/messages/search-messages' import { searchMessages } from './methods/messages/search-messages'
import { sendDice } from './methods/messages/send-dice' import { sendDice } from './methods/messages/send-dice'
import { sendLocation } from './methods/messages/send-location'
import { sendMedia } from './methods/messages/send-media' import { sendMedia } from './methods/messages/send-media'
import { sendPhoto } from './methods/messages/send-photo' import { sendPhoto } from './methods/messages/send-photo'
import { sendText } from './methods/messages/send-text' import { sendText } from './methods/messages/send-text'
@ -744,9 +745,12 @@ export class TelegramClient extends BaseTelegramClient {
/** /**
* Send an animated dice with a random value. * Send an animated dice with a random value.
* *
* For convenience, supported dice emojis are available * For convenience, known dice emojis are available
* as static members of {@link Dice}. * as static members of {@link Dice}.
* *
* Note that dice result value is generated randomly on the server,
* you can't influence it in any way!
*
* @param chatId ID of the chat, its username, phone or `"me"` or `"self"` * @param chatId ID of the chat, its username, phone or `"me"` or `"self"`
* @param emoji Emoji representing a dice * @param emoji Emoji representing a dice
* @param params Additional sending parameters * @param params Additional sending parameters
@ -781,6 +785,44 @@ export class TelegramClient extends BaseTelegramClient {
): Promise<Message> { ): Promise<Message> {
return sendDice.apply(this, arguments) return sendDice.apply(this, arguments)
} }
/**
* Send a static geo location.
*
* @param chatId ID of the chat, its username, phone or `"me"` or `"self"`
* @param latitude Latitude of the location
* @param longitude Longitude of the location
* @param params Additional sending parameters
*/
sendLocation(
chatId: InputPeerLike,
latitude: number,
longitude: number,
params?: {
/**
* Message to reply to. Either a message object or message ID.
*/
replyTo?: number | Message
/**
* Whether to send this message silently.
*/
silent?: boolean
/**
* If set, the message will be scheduled to this date.
* When passing a number, a UNIX time in ms is expected.
*/
schedule?: Date | number
/**
* For bots: inline or reply markup or an instruction
* to hide a reply keyboard or to force a reply.
*/
replyMarkup?: ReplyMarkup
}
): Promise<Message> {
return sendLocation.apply(this, arguments)
}
/** /**
* Send a single media. * Send a single media.
* *

View file

@ -44,7 +44,6 @@ export async function sendDice(
* to hide a reply keyboard or to force a reply. * to hide a reply keyboard or to force a reply.
*/ */
replyMarkup?: ReplyMarkup replyMarkup?: ReplyMarkup
} }
): Promise<Message> { ): Promise<Message> {
if (!params) params = {} if (!params) params = {}
@ -57,7 +56,7 @@ export async function sendDice(
peer, peer,
media: { media: {
_: 'inputMediaDice', _: 'inputMediaDice',
emoticon: emoji emoticon: emoji,
}, },
silent: params.silent, silent: params.silent,
replyToMsgId: params.replyTo replyToMsgId: params.replyTo
@ -68,7 +67,7 @@ export async function sendDice(
randomId: randomUlong(), randomId: randomUlong(),
scheduleDate: normalizeDate(params.schedule), scheduleDate: normalizeDate(params.schedule),
replyMarkup, replyMarkup,
message: '' message: '',
}) })
return this._findMessageInUpdate(res) return this._findMessageInUpdate(res)

View file

@ -0,0 +1,73 @@
import { BotKeyboard, InputPeerLike, Message, ReplyMarkup } from '../../types'
import { TelegramClient } from '../../client'
import { normalizeToInputPeer } from '../../utils/peer-utils'
import { normalizeDate, randomUlong } from '../../utils/misc-utils'
/**
* Send a static geo location.
*
* @param chatId ID of the chat, its username, phone or `"me"` or `"self"`
* @param latitude Latitude of the location
* @param longitude Longitude of the location
* @param params Additional sending parameters
* @internal
*/
export async function sendLocation(
this: TelegramClient,
chatId: InputPeerLike,
latitude: number,
longitude: number,
params?: {
/**
* Message to reply to. Either a message object or message ID.
*/
replyTo?: number | Message
/**
* Whether to send this message silently.
*/
silent?: boolean
/**
* If set, the message will be scheduled to this date.
* When passing a number, a UNIX time in ms is expected.
*/
schedule?: Date | number
/**
* For bots: inline or reply markup or an instruction
* to hide a reply keyboard or to force a reply.
*/
replyMarkup?: ReplyMarkup
}
): Promise<Message> {
if (!params) params = {}
const peer = normalizeToInputPeer(await this.resolvePeer(chatId))
const replyMarkup = BotKeyboard._convertToTl(params.replyMarkup)
const res = await this.call({
_: 'messages.sendMedia',
peer,
media: {
_: 'inputMediaGeoPoint',
geoPoint: {
_: 'inputGeoPoint',
lat: latitude,
long: longitude
}
},
silent: params.silent,
replyToMsgId: params.replyTo
? typeof params.replyTo === 'number'
? params.replyTo
: params.replyTo.id
: undefined,
randomId: randomUlong(),
scheduleDate: normalizeDate(params.schedule),
replyMarkup,
message: '',
})
return this._findMessageInUpdate(res)
}