SA-MP Forums

SA-MP Forums (https://forum.sa-mp.com/index.php)
-   Plugin Development (https://forum.sa-mp.com/forumdisplay.php?f=18)
-   -   [Plugin] Telegram Connector (https://forum.sa-mp.com/showthread.php?t=663075)

SyS 21/01/2019 09:34 AM

Telegram Connector
 

Installing

If you are a sampctl user

Code:

sampctl p install Sreyas-Sreelal/tgconnector


OR
  • Download suitable binary files from releases for your operating system
  • Add it your plugins folder
  • Add tgconnector to server.cfg or tgconnector.so (for linux)
  • Add tgconnector.inc in includes folder

Building


Example

A basic bot

pawn Code:
#include<a_samp>
#include<tgconnector>
#include<zcmd>

#define CHAT_ID (TGChatId:"YOUR_CHAT_ID_HERE")

new TGBot:g_bot;

main() {
    //Store bot token in SAMP_TG_BOT environment variable and connect from it
    g_bot = TGConnectFromEnv("SAMP_TG_BOT");
    if(g_bot != INVALID_BOT_ID) {
        printf("bot connected successfully!");
    } else {
        printf("Error: bot couldn't connect");
    }
}

public OnTGMessage(TGBot:bot,TGUser:fromid,TGMessage:messageid) {
   
    if(g_bot != bot){
        return 1;
    }

    new
        message[50],
        username[24],
        chatname[56],
        server_msg[128];

    TGCacheGetMessage(message);
    TGCacheGetUserName(username);
    TGCacheGetChatName(chatname);
   
    format(server_msg,128,"[%s] %s(%d): %s",chatname,username,_:fromid,message);
    SendClientMessageToAll(-1,server_msg);
   
    return 1;
}


public OnTGUserJoined(TGBot:bot,TGUser:userid) {
    new
        TGChatId:chatid[15],
        username[24],
        chatname[56],
        server_msg[128];
   
    //Retrive data stored in current context
    TGCacheGetUserName(username);
    TGCacheGetChatId(chatid);
    TGCacheGetChatName(chatname);

    format(server_msg,128,"User %s(%d) joined %s(%s)",username,_:userid,chatname,_:chatid);
    SendClientMessageToAll(-1,server_msg);
    return 1;
}

public OnTGUserLeft(TGBot:bot,TGUser:userid) {
    new
        TGChatId:chatid[15],
        username[24],
        chatname[56],
        server_msg[128];
   
    TGCacheGetUserName(username);
    TGCacheGetChatId(chatid);
    TGCacheGetChatName(chatname);

    format(server_msg,128,"User %s(%d) left %s(%s)",username,_:userid,chatname,_:chatid);
    SendClientMessageToAll(-1,server_msg);
    return 1;
}

CMD:sendtgmessage(playerid,params[]) {
    TGSendMessage(g_bot,CHAT_ID,params);
    return 1;
}

Notes
This plugin is still in WIP and more tests need to be done.If you find any bugs or have anything to contribute feel free to open an issue or pull request on github.
Also be sure to not to share your bot token with anyone it's recommended to store it inside a environment variable.

Repository
Source: https://github.com/Sreyas-Sreelal/tgconnector
Releases: https://github.com/Sreyas-Sreelal/tgconnector/releases
Wiki: https://github.com/Sreyas-Sreelal/tgconnector/wiki (Not complete yet)

Hazon 21/01/2019 10:21 AM

Re: Telegram Connector
 
Going to test, wd.

SyS 22/01/2019 06:08 AM

Re: Telegram Connector
 
New version (v0.1.0)
https://github.com/Sreyas-Sreelal/tg...ases/tag/0.1.0
  • Channel updates are now serialized correctly.
  • New callback OnTGChannelPost has been added.

NimA00GaMeR 22/01/2019 12:21 PM

Re: Telegram Connector
 
Wowwww.
It's Great!

Kar 22/01/2019 01:23 PM

Re: Telegram Connector
 
Lol telegram, good job!

Chaprnks 25/01/2019 10:00 PM

Re: Telegram Connector
 
Thank you so much for this plugin!


Update:
I can't for the life of me, seem to figure out how to find the chat id of my channel.. even tried using the GetIDsBot telegram bot with no luck.. lol

SyS 26/01/2019 02:18 AM

Re: Telegram Connector
 
Quote:

Originally Posted by Chaprnks (Post 4079099)
Thank you so much for this plugin!


Update:
I can't for the life of me, seem to figure out how to find the chat id of my channel.. even tried using the GetIDsBot telegram bot with no luck.. lol

There are couple of tricks to get chat id of a private channel.Here's one you can do in pawn itself.

Add your bot as admin in your channel.
Make channel public and set a user name (username is one along with invite link).
Use TGSendMessage with chatid as user username with a prefix '@' and specify a callback.
Use TGCacheGetChatId to get chatid stored inside the cache.

For example my channel' username is samptest
Use following snippet

PHP Code:

new TGBot:g_bot;

main() {
    
g_bot TGConnectFromEnv("SAMP_TG_BOT");
    
TGSendMessage(g_bot,TGChatId:"@samptest","test message",.callback="OnChannelSendMessage");
}

forward OnChannelSendMessage(TGBot:bot,TGMessage:messageid);
public 
OnChannelSendMessage(TGBot:bot,TGMessage:messageid) {
    new 
TGChatId:chatid[15];
    
TGCacheGetChatId(chatid);
    
printf("the chatid is %s",_:chatid);
    return 
1;


Now you can set the channel back to private.
You can also do the same by sending an api request in your browser with chatid parameter as your channel username or use OnTGChannelPost callback and send a message to your channel manually and use TGCacheGetChatId there.

Chaprnks 26/01/2019 06:30 AM

Re: Telegram Connector
 
Quote:

Originally Posted by SyS (Post 4079140)
There are couple of tricks to get chat id of a private channel.Here's one you can do in pawn itself.

Add your bot as admin in your channel.
Make channel public and set a user name (username is one along with invite link).
Use TGSendMessage with chatid as user username with a prefix '@' and specify a callback.
Use TGCacheGetChatId to get chatid stored inside the cache.

For example my channel' username is samptest
Use following snippet

PHP Code:

new TGBot:g_bot;

main() {
    
g_bot TGConnectFromEnv("SAMP_TG_BOT");
    
TGSendMessage(g_bot,TGChatId:"@samptest","test message",.callback="OnChannelSendMessage");
}

forward OnChannelSendMessage(TGBot:bot,TGMessage:messageid);
public 
OnChannelSendMessage(TGBot:bot,TGMessage:messageid) {
    new 
TGChatId:chatid[15];
    
TGCacheGetChatId(chatid);
    
printf("the chatid is %s",_:chatid);
    return 
1;


Now you can set the channel back to private.
You can also do the same by sending an api request in your browser with chatid parameter as your channel username or use OnTGChannelPost callback and send a message to your channel manually and use TGCacheGetChatId there.

Thank you so much! It's odd how they make it so difficult to find something as simple as a ID field..

SyS 26/01/2019 07:17 AM

Re: Telegram Connector
 
Quote:

Originally Posted by Chaprnks (Post 4079155)
Thank you so much! It's odd how they make it so difficult to find something as simple as a ID field..

It's true.But still forwarding message to @get_id_bot is easier way and idk why it didn't work for you.

GhostHacker9 07/02/2019 01:25 AM

Re: Telegram Connector
 
Wtf why I didn't see this before.This is so great!Thank you so much


All times are GMT. The time now is 05:25 AM.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.