Метод setGameScore

Метод устанавливает счёт указанного пользователя в игровом сообщении, возвращая сообщение или true в зависимости от типа сообщения.

Описание

Используйте этот метод, чтобы установить счёт указанного пользователя в игровом сообщении. При успешном выполнении, если сообщение не является инлайн-сообщением, возвращается Message, в противном случае возвращается True. Возвращает ошибку, если новый счёт не больше текущего счёта пользователя в чате и параметр force имеет значение False.

Параметр Тип Обязательный Описание
user_id Integer Да Идентификатор пользователя
score Integer Да Новый счёт, должен быть неотрицательным
force Boolean Опционально Передайте True, если разрешено уменьшение рекордного счёта (может быть полезно при исправлении ошибок или блокировке читеров)
disable_edit_message Boolean Опционально Передайте True, если игровое сообщение не должно автоматически редактироваться для отображения текущей таблицы результатов
chat_id Integer Опционально Обязателен, если не указан inline_message_id. Уникальный идентификатор целевого чата
message_id Integer Опционально Обязателен, если не указан inline_message_id. Идентификатор отправленного сообщения
inline_message_id String Опционально Обязателен, если не указаны chat_id и message_id. Идентификатор инлайн-сообщения

Примеры

php

<?php

$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/";

// Пример 1: Обновление счета в обычном сообщении
function setGameScoreInMessage($userId, $score, $chatId, $messageId, $force = false, $disableEdit = false) {
    global $apiUrl;
    
    $data = [
        'user_id' => $userId,
        'score' => $score,
        'chat_id' => $chatId,
        'message_id' => $messageId,
        'force' => $force,
        'disable_edit_message' => $disableEdit
    ];
    
    $ch = curl_init($apiUrl . 'setGameScore');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

// Пример 2: Обновление счета в inline-сообщении
function setGameScoreInline($userId, $score, $inlineMessageId, $force = false, $disableEdit = false) {
    global $apiUrl;
    
    $data = [
        'user_id' => $userId,
        'score' => $score,
        'inline_message_id' => $inlineMessageId,
        'force' => $force,
        'disable_edit_message' => $disableEdit
    ];
    
    $ch = curl_init($apiUrl . 'setGameScore');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

// Пример использования для обычного сообщения
$result = setGameScoreInMessage(
    123456789, // user_id
    1500,      // новый счет
    -100123456789, // chat_id
    123,       // message_id
    true,      // force - разрешить уменьшение счета
    false      // disable_edit_message - разрешить редактирование сообщения
);

if ($result['ok']) {
    echo "Счет обновлен. Возвращено сообщение: " . json_encode($result['result']);
} else {
    echo "Ошибка: " . $result['description'];
}

// Пример использования для inline-сообщения
$result = setGameScoreInline(
    123456789, // user_id
    2000,      // новый счет
    'AgAAABCDEFGH', // inline_message_id
    false,     // force - запретить уменьшение счета
    true       // disable_edit_message - не редактировать сообщение
);

if ($result['ok']) {
    echo "Счет обновлен. Возвращено: " . ($result['result'] ? 'true' : 'false');
} else {
    echo "Ошибка: " . $result['description'];
}

?>

python

import requests

BOT_TOKEN = "YOUR_BOT_TOKEN_HERE"

def set_game_score(user_id, score, force=None, disable_edit_message=None, 
                   chat_id=None, message_id=None, inline_message_id=None):
    """
    Устанавливает счет указанного пользователя в игровом сообщении.
    
    Args:
        user_id (int): Идентификатор пользователя
        score (int): Новый счет (неотрицательный)
        force (bool, optional): Разрешить уменьшение счета
        disable_edit_message (bool, optional): Не редактировать сообщение автоматически
        chat_id (int, optional): ID чата (если не inline сообщение)
        message_id (int, optional): ID сообщения (если не inline сообщение)
        inline_message_id (str, optional): ID inline сообщения
    
    Returns:
        dict or bool: Объект Message или True в случае успеха
    """
    
    url = f"https://api.telegram.org/bot{BOT_TOKEN}/setGameScore"
    
    params = {
        "user_id": user_id,
        "score": score
    }
    
    # Добавляем необязательные параметры
    if force is not None:
        params["force"] = force
    if disable_edit_message is not None:
        params["disable_edit_message"] = disable_edit_message
    
    # Определяем тип сообщения (обычное или inline)
    if inline_message_id:
        params["inline_message_id"] = inline_message_id
    elif chat_id and message_id:
        params["chat_id"] = chat_id
        params["message_id"] = message_id
    else:
        raise ValueError("Необходимо указать либо chat_id и message_id, либо inline_message_id")
    
    response = requests.post(url, json=params)
    return response.json()

# Пример 1: Обновление счета в обычном сообщении
result1 = set_game_score(
    user_id=123456789,
    score=1500,
    force=True,
    disable_edit_message=False,
    chat_id=-1001234567890,
    message_id=123
)

# Пример 2: Обновление счета в inline сообщении
result2 = set_game_score(
    user_id=123456789,
    score=2000,
    force=False,
    inline_message_id="AQAAABCD1234"
)

# Пример 3: Простое обновление счета (без изменения сообщения)
result3 = set_game_score(
    user_id=123456789,
    score=1800,
    disable_edit_message=True,
    chat_id=-1001234567890,
    message_id=123
)

История изменений

  • API 2.2.. Добавлен метод setGameScore
  • API 2.3. Обновлен метод setGameScore: Добавлен параметр force для обновления высоких очков на более низкое значение и параметр disable_edit_message для отключения автоматического обновления сообщений с высокими очками

Дополнительно

  • Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
Комментарии