ROBLOX — Отправка сообщений в Telegram

Автор: | 26 октября, 2024
Поделиться...

В связи событиями связанными с Discord пришлось переделывать модуль сообщений наружу. Как более «надёжный» сервис взяли мессенджер Telegram.

Расписывать как создавалось решение здесь не буду (это я описал на профильном форуме), а сразу приведу модуль и его использование. Естественно что всё делается в ServerScriptService.

В модуле есть ссылка вдохновения где расписано как создать группу и подключить к ней нашего «бота».

-- Источники вдохновения
-- https://progclub.ru/resheniya/1s-bitriks/publikatsiya-zapisey-s-sayta-v-telegram-kanal/
-- https://core.telegram.org/bots/api#sendmessage

local HTTP = game:GetService("HttpService")

local TELEGRAM_API_KEY = '11111111111:AAAAAAAAAAAAAAAAAAAAAAAAAAAA'
local TELEGRAM_CHAT_ID = '@чат_ид'

local module = {}

-- локальная функция отвечающая за отправку сообщения
local function request(toServer)
	local url = 'https://api.telegram.org/bot' .. TELEGRAM_API_KEY .. '/sendMessage'
	-- отправка запроса на сервер
	--print(HTTP:JSONEncode(toServer))
	local response = HTTP:RequestAsync(
		{
			Url = url,  -- Сайт для запроса
			Method = "POST",
			Body = HTTP:JSONEncode(toServer),
			Headers = {
				["Content-Type"] = "application/json"  -- Для отправки в формате JSON
			}			
		}
	)
	-- Проверка возвращённой таблицы
	if response.Success then
		return response.Body
	else
		warn("The request failed:", response.StatusCode, response.StatusMessage)
		warn(response.Body)
		return response.StatusMessage
	end
end

-- внешняя функция для отправки сообщения
function module:Send(player, txt)
	local res = nil -- возвращаемое значение (nil в случае провала)

	-- подготовка команды для сервера
	local toServer = {}
	toServer.chat_id = TELEGRAM_CHAT_ID
	toServer.text = player.DisplayName .. "|" .. player.Name .. "|" ..  player.UserId .. "|" .. txt

	-- отправка на сервер и получение ответа
	local success, message = pcall(request, toServer)
	if not success then
		warn("==============================")
		warn("Http Request failed:")
		warn(message)
		warn("==============================")
	else
		if message == "Forbidden" then
			warn("!!! САЙТ НЕ ДОСТУПЕН !!!")
			return nil
		end

		local data = HTTP:JSONDecode(message)
		if data.message == "success" then 
			--- обработка декодированного ответа сервера
			res = data
		end
	end
	return res
end

return module

И собственно пример вызова данного модуля из скрипта:

local Player = game:GetService("Players")
local SSS = game:GetService("ServerScriptService")

local telegram = require(SSS:WaitForChild("Telegram")) 

function onPlayer(player)
	telegram:Send(player, "Вошёл в игру")
end

function offPlayer(player)
	telegram:Send(player, "Вышёл из игры")
end

Player.PlayerAdded:Connect(onPlayer)
Player.PlayerRemoving:Connect(offPlayer)

Ну и конечно — полученный результат в телеге:

Как получить ID чата?

  • Добавьте его в свой список контактов. Проще всего это сделать пройдя по ссылке вида t.me/botname
  • Отправьте ему любое сообщение
  • Через браузер открывайте ссылку https://api.telegram.org/bot%TOKEN%/getUpdates заменив %TOKEN% на строку, которую вам выдал BotFather ранее

Вы увидите JSON, который будет содержать все необходимые данные о последнем сообщении.


Поделиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *