Описание
Используйте этот метод, чтобы установить счёт указанного пользователя в игровом сообщении. При успешном выполнении, если сообщение не является инлайн-сообщением, возвращается 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, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.