feat(core): fact checks
This commit is contained in:
parent
3cc193a8fa
commit
f84da0dce8
7 changed files with 124 additions and 0 deletions
|
@ -134,6 +134,7 @@ import { ForwardMessageOptions, forwardMessages, forwardMessagesById } from './m
|
||||||
import { getAllScheduledMessages } from './methods/messages/get-all-scheduled-messages.js'
|
import { getAllScheduledMessages } from './methods/messages/get-all-scheduled-messages.js'
|
||||||
import { getCallbackQueryMessage } from './methods/messages/get-callback-query-message.js'
|
import { getCallbackQueryMessage } from './methods/messages/get-callback-query-message.js'
|
||||||
import { getDiscussionMessage } from './methods/messages/get-discussion-message.js'
|
import { getDiscussionMessage } from './methods/messages/get-discussion-message.js'
|
||||||
|
import { getFactCheck } from './methods/messages/get-fact-check.js'
|
||||||
import { getHistory, GetHistoryOffset } from './methods/messages/get-history.js'
|
import { getHistory, GetHistoryOffset } from './methods/messages/get-history.js'
|
||||||
import { getMessageByLink } from './methods/messages/get-message-by-link.js'
|
import { getMessageByLink } from './methods/messages/get-message-by-link.js'
|
||||||
import { getMessageGroup } from './methods/messages/get-message-group.js'
|
import { getMessageGroup } from './methods/messages/get-message-group.js'
|
||||||
|
@ -277,6 +278,7 @@ import {
|
||||||
DeleteMessageUpdate,
|
DeleteMessageUpdate,
|
||||||
DeleteStoryUpdate,
|
DeleteStoryUpdate,
|
||||||
Dialog,
|
Dialog,
|
||||||
|
FactCheck,
|
||||||
FileDownloadLocation,
|
FileDownloadLocation,
|
||||||
FileDownloadParameters,
|
FileDownloadParameters,
|
||||||
ForumTopic,
|
ForumTopic,
|
||||||
|
@ -3277,6 +3279,16 @@ export interface TelegramClient extends ITelegramClient {
|
||||||
* @param message ID of the channel post
|
* @param message ID of the channel post
|
||||||
*/
|
*/
|
||||||
getDiscussionMessage(params: InputMessageId): Promise<Message | null>
|
getDiscussionMessage(params: InputMessageId): Promise<Message | null>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get fact check information for one or more messages in a chat
|
||||||
|
*
|
||||||
|
* **Available**: 👤 users only
|
||||||
|
*
|
||||||
|
* @param chatId Chat where the messages are located
|
||||||
|
* @param msgIds One or more message IDs
|
||||||
|
*/
|
||||||
|
getFactCheck(chatId: InputPeerLike, msgIds: MaybeArray<number>): Promise<(FactCheck | null)[]>
|
||||||
/**
|
/**
|
||||||
* Get chat history.
|
* Get chat history.
|
||||||
*
|
*
|
||||||
|
@ -5910,6 +5922,9 @@ TelegramClient.prototype.getCallbackQueryMessage = function (...args) {
|
||||||
TelegramClient.prototype.getDiscussionMessage = function (...args) {
|
TelegramClient.prototype.getDiscussionMessage = function (...args) {
|
||||||
return getDiscussionMessage(this._client, ...args)
|
return getDiscussionMessage(this._client, ...args)
|
||||||
}
|
}
|
||||||
|
TelegramClient.prototype.getFactCheck = function (...args) {
|
||||||
|
return getFactCheck(this._client, ...args)
|
||||||
|
}
|
||||||
TelegramClient.prototype.getHistory = function (...args) {
|
TelegramClient.prototype.getHistory = function (...args) {
|
||||||
return getHistory(this._client, ...args)
|
return getHistory(this._client, ...args)
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,7 @@ export { forwardMessages } from './methods/messages/forward-messages.js'
|
||||||
export { getAllScheduledMessages } from './methods/messages/get-all-scheduled-messages.js'
|
export { getAllScheduledMessages } from './methods/messages/get-all-scheduled-messages.js'
|
||||||
export { getCallbackQueryMessage } from './methods/messages/get-callback-query-message.js'
|
export { getCallbackQueryMessage } from './methods/messages/get-callback-query-message.js'
|
||||||
export { getDiscussionMessage } from './methods/messages/get-discussion-message.js'
|
export { getDiscussionMessage } from './methods/messages/get-discussion-message.js'
|
||||||
|
export { getFactCheck } from './methods/messages/get-fact-check.js'
|
||||||
export type { GetHistoryOffset } from './methods/messages/get-history.js'
|
export type { GetHistoryOffset } from './methods/messages/get-history.js'
|
||||||
export { getHistory } from './methods/messages/get-history.js'
|
export { getHistory } from './methods/messages/get-history.js'
|
||||||
export { getMessageByLink } from './methods/messages/get-message-by-link.js'
|
export { getMessageByLink } from './methods/messages/get-message-by-link.js'
|
||||||
|
|
|
@ -45,6 +45,7 @@ import {
|
||||||
DeleteMessageUpdate,
|
DeleteMessageUpdate,
|
||||||
DeleteStoryUpdate,
|
DeleteStoryUpdate,
|
||||||
Dialog,
|
Dialog,
|
||||||
|
FactCheck,
|
||||||
FileDownloadLocation,
|
FileDownloadLocation,
|
||||||
FileDownloadParameters,
|
FileDownloadParameters,
|
||||||
ForumTopic,
|
ForumTopic,
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
import { MaybeArray } from '../../../types/utils.js'
|
||||||
|
import { ITelegramClient } from '../../client.types.js'
|
||||||
|
import { InputPeerLike } from '../../types/index.js'
|
||||||
|
import { FactCheck } from '../../types/messages/fact-check.js'
|
||||||
|
import { resolvePeer } from '../users/resolve-peer.js'
|
||||||
|
|
||||||
|
// @available=user
|
||||||
|
/**
|
||||||
|
* Get fact check information for one or more messages in a chat
|
||||||
|
*
|
||||||
|
* @param chatId Chat where the messages are located
|
||||||
|
* @param msgIds One or more message IDs
|
||||||
|
*/
|
||||||
|
export async function getFactCheck(
|
||||||
|
client: ITelegramClient,
|
||||||
|
chatId: InputPeerLike,
|
||||||
|
msgIds: MaybeArray<number>,
|
||||||
|
): Promise<(FactCheck | null)[]> {
|
||||||
|
const res = await client.call({
|
||||||
|
_: 'messages.getFactCheck',
|
||||||
|
peer: await resolvePeer(client, chatId),
|
||||||
|
msgId: Array.isArray(msgIds) ? msgIds : [msgIds],
|
||||||
|
})
|
||||||
|
|
||||||
|
return res.map((x) => {
|
||||||
|
if (x.hash.isZero()) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
return new FactCheck(x)
|
||||||
|
})
|
||||||
|
}
|
59
packages/core/src/highlevel/types/messages/fact-check.ts
Normal file
59
packages/core/src/highlevel/types/messages/fact-check.ts
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
import { tl } from '@mtcute/tl'
|
||||||
|
|
||||||
|
import { makeInspectable } from '../../utils/inspectable.js'
|
||||||
|
import { memoizeGetters } from '../../utils/memoize.js'
|
||||||
|
import { MessageEntity } from './message-entity.js'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes a fact-check added to the message by an independent checker
|
||||||
|
*/
|
||||||
|
export class FactCheck {
|
||||||
|
constructor(readonly raw: tl.RawFactCheck) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Text of the fact-check
|
||||||
|
*/
|
||||||
|
get text(): string {
|
||||||
|
return this.raw.text?.text ?? ''
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entities contained in the fact-check text
|
||||||
|
*/
|
||||||
|
get entities(): MessageEntity[] {
|
||||||
|
const entities: MessageEntity[] = []
|
||||||
|
|
||||||
|
if (this.raw.text?.entities) {
|
||||||
|
for (const ent of this.raw.text.entities) {
|
||||||
|
entities.push(new MessageEntity(ent, this.raw.text.text))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return entities
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Country for which the fact-check is relevant
|
||||||
|
*/
|
||||||
|
get country(): string | null {
|
||||||
|
return this.raw.country ?? null
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether this information might be outdated
|
||||||
|
* and should be re-fetched manually
|
||||||
|
*/
|
||||||
|
get shouldRecheck(): boolean {
|
||||||
|
return this.raw.needCheck!
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hash of the fact-check
|
||||||
|
*/
|
||||||
|
get hash(): tl.Long {
|
||||||
|
return this.raw.hash
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
memoizeGetters(FactCheck, ['entities'])
|
||||||
|
makeInspectable(FactCheck)
|
|
@ -1,5 +1,6 @@
|
||||||
export * from './dialog.js'
|
export * from './dialog.js'
|
||||||
export * from './draft-message.js'
|
export * from './draft-message.js'
|
||||||
|
export * from './fact-check.js'
|
||||||
export * from './input-message-id.js'
|
export * from './input-message-id.js'
|
||||||
export * from './message.js'
|
export * from './message.js'
|
||||||
export * from './message-action.js'
|
export * from './message-action.js'
|
||||||
|
|
|
@ -12,6 +12,7 @@ import { Chat } from '../peers/chat.js'
|
||||||
import { parsePeer, Peer } from '../peers/peer.js'
|
import { parsePeer, Peer } from '../peers/peer.js'
|
||||||
import { PeersIndex } from '../peers/peers-index.js'
|
import { PeersIndex } from '../peers/peers-index.js'
|
||||||
import { User } from '../peers/user.js'
|
import { User } from '../peers/user.js'
|
||||||
|
import { FactCheck } from './fact-check.js'
|
||||||
import { _messageActionFromTl, MessageAction } from './message-action.js'
|
import { _messageActionFromTl, MessageAction } from './message-action.js'
|
||||||
import { MessageEntity } from './message-entity.js'
|
import { MessageEntity } from './message-entity.js'
|
||||||
import { MessageForwardInfo } from './message-forward.js'
|
import { MessageForwardInfo } from './message-forward.js'
|
||||||
|
@ -462,6 +463,9 @@ export class Message {
|
||||||
return this.raw._ === 'message' && !this.raw.noforwards
|
return this.raw._ === 'message' && !this.raw.noforwards
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reactions added to this message, if any
|
||||||
|
*/
|
||||||
get reactions(): MessageReactions | null {
|
get reactions(): MessageReactions | null {
|
||||||
if (this.raw._ === 'messageService' || !this.raw.reactions) {
|
if (this.raw._ === 'messageService' || !this.raw.reactions) {
|
||||||
return null
|
return null
|
||||||
|
@ -470,6 +474,16 @@ export class Message {
|
||||||
return new MessageReactions(this.raw.id, getMarkedPeerId(this.raw.peerId), this.raw.reactions, this._peers)
|
return new MessageReactions(this.raw.id, getMarkedPeerId(this.raw.peerId), this.raw.reactions, this._peers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Information about fact-check added to the message, if any
|
||||||
|
*/
|
||||||
|
get factCheck(): FactCheck | null {
|
||||||
|
if (this.raw._ === 'messageService') return null
|
||||||
|
if (!this.raw.factcheck || this.raw.factcheck.hash.isZero()) return null
|
||||||
|
|
||||||
|
return new FactCheck(this.raw.factcheck)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generated permalink to this message, only for groups and channels
|
* Generated permalink to this message, only for groups and channels
|
||||||
*
|
*
|
||||||
|
@ -499,5 +513,6 @@ memoizeGetters(Message, [
|
||||||
'media',
|
'media',
|
||||||
'markup',
|
'markup',
|
||||||
'reactions',
|
'reactions',
|
||||||
|
'factCheck',
|
||||||
])
|
])
|
||||||
makeInspectable(Message, ['isScheduled'], ['link'])
|
makeInspectable(Message, ['isScheduled'], ['link'])
|
||||||
|
|
Loading…
Reference in a new issue