[Tutorial] Implementaзгo Discord + SA:MP [Rank/Comandos/Informaзхes]
#1

Bom dia galera!

este tutorial ira trazer algo bacana, e muito legal para seus servidores, poderб interagir com um bot, criado de maneira simples, e que interage com seu servidor!

INTRODUЗГO:
aqui vocк ira aprender a fazer com que o bot do discord, de-em informaзхes simples como IP do servidor, site, quantos estгo online, e quem estб jogando... alem de muitas coisas!

NOTAS:
  • й necessбrio que vocк tenha o serviзo SSL instalado com ou sem certificado, para que o bot funcione!
    (nгo irei explicar aqui, por que cada distro tem modo de instalaзгo entгo procure por seu SO)
  • vocк tem que ser dono do servidor para convidar bot (ou ter um cargo elevado)
  • sempre busque o plugin mais atualizado para evitar falhas, e manter estabilidade
  • se forem mostrar para alguйm, me marque nos crйditos, eu ficarei muito feliz por isso!
  • se vocкs melhorarem o cуdigo, nгo guarde para si! coloque aqui para compartilhar seu conhecimento! ^^[/I]
Criando um bot:

Vocк precisarб criar um bot primeiro para saber o token de seu bot para o plugin.
Instalaзгo:

Configurando o seu bot:

na sua server cfg, coloque o token de seu bot deste modo, para que
Code:
discord_bot_token YOUR_BOT_TOKEN_HERE
Instale o Plugin Discord Connector:

Baixe a versгo mais atualizada: https://github.com/maddinat0r/samp-d...ector/releases
e extraia a pasta em seu servidor.

apуs isso configure a sua server.cfg para carregar o plugin deste modo:
Code:
plugins discord-connector
Instale o processador de comandos DDCMD:

Instale o DDCMD para que possa trabalhar facilmente com comandos no discord!
https://sampforum.blast.hk/showthread.php?tid=652258
https://github.com/RodrigoDornelles/...iscord-cmd.inc

em seu gamemode ficara assim:

Code:
new    DCC_COMMAND_PREFIX[]= {'!','+','/'}; //opcional se quiser personalizar seus prefixos! 

#include <discord-connector>			//livraria do bot no discord!
#include <discord-cmd>				//comandos discord
Colocando funcionalidades ao plugin:

Sicronizar chat:

PHP Code:
#define DC_CHATGLOBAL     "323103597942276096"    //chatid (clique com botao direito nele e copiar o id no discord)
static DCC_Channel:g_ChatGlobal;
forward DiscordMessage(DCC_Channel:channelDCC_User:author, const message[]);
hook OnGameModeInit()
{
    
g_ChatGlobal     DCC_FindChannelByIdDC_CHATGLOBAL);    //localisar seu chat pretendido
    
return Y_HOOKS_CONTINUE_RETURN_1;
}
hook OnPlayerText(playeridtext[])
{
    new 
message[200];
    
format(message200"**`%s`** [%d] -> *`%s`*"GetPlayerNameEx(playerid), playeridtext);//formate de acordo com seu gosto
    
DCC_SendChannelMessage(g_ChatGlobal,message);    //envia a menssagem do SA:MP no discord
    
return Y_HOOKS_CONTINUE_RETURN_1;
}
//DCC_OnChannelMessage(DCC_Channel:channel, DCC_User:author, const message[])  se nгo utilizar o DDCMD
public DiscordMessage(DCC_Channel:channelDCC_User:author, const message[])
{
    if(
IsDiscordBot(author)) 
        return 
1;    //nгo enviara mensagem de outros bots
    
if(g_ChatGlobal != channel)
        return 
1;    //caso a mensagem for fora do seu canal escolhido, nгo mostrara no servidor
    
new msg[512];
    
format(msgsizeof(msg), "[Discord] {00AAFF}%s{FFFFFF}: %s"GetNickDiscord(author), message);    //formate de acordo com seu gosto
    
SendClientMessageToAll(0xFFFFFFFFmsg);    //enviara mesnagem para todos os players
    
return 1;
}
stock IsDiscordBot(DCC_User:author)    //funзгo simplificada
{
    new 
bool:Isabot;
    
DCC_IsUserBot(authorIsabot);
    return 
Isabot;

Rank de jogadores:

PHP Code:
DDCMD:rank(DCC_Channel:channelDCC_User:useridparams[])//quando alguem der o comando !rank no discord chamara esta funзгo
{
    if(!
strcmp(params"pvp"true))
        return 
DCC_SendChannelMessage(channel,"exemplo");
    else if(!
strcmp(params"score"true))
    {
        
//consulta no banco de dados, para pegar 10 primeiros usuarios, com  maior score
        
mysql_function_query(mysql"SELECT `score`,`usuario` from `contas` order by `score` desc LIMIT 10"true"RankScore_D""d"channel);
        return 
1;
    }
    else if(!
strcmp(params"grana"true))
        return 
DCC_SendChannelMessage(channel,"exemplo");
    else if(!
strcmp(params"online",true))
        return 
DCC_SendChannelMessage(channel,"exemplo");
    
//parametros incompativeis
    
return DCC_SendChannelMessage(channel,"`utilize: /rank [pvp/online/grana/score]`");    //mostrara as suas oзхes de rank
}
forward RankScore_D(DCC_Channel:channel);
public     
RankScore_D(DCC_Channel:channel)//resultado da consulta
{
    new 
rows,fields;
    
cache_get_data(rows,fields);//captar numero de linhas e colunas    
    
    //str -> serб formataзгo da menssagem
    //temp-> formataзгo da linha antes de inserir na str
    //score-> valor obetido do player
    //nick-> nome do jogador
    //``` -> criara campo [code] no discord (design mais bonito)
    //PHP -> deixar uma cor legal no campo CODE
    
new str[1010]="```PHP",nick[MAX_PLAYER_NAME],temp[100], score;
    for(new 
0rowsi++)//looping para os 10 mais pontuados (caso nгo houver 10 contas mostrara a menos!)
    
{
        
cache_get_field_content(i"usuario"nick);    //receber nome do jogador
        
score cache_get_field_content_int(i"score");//receber o score
        // %c -> char 
        //0xD, 0xA -> char quebra linha 
        //I+1 -> a contagem comeзa do 0, entгo adiciona +1 para ser de numeraзгo 1° ao 10°
        //nick-> nome do jogador
        
format(tempsizeof(temp), "%c%c[%02d] %s"0xD0xAi+1nick);
        
strcat(strtemp);//colocara a linha formata na string str
        //conta o tamanho do nick
        
new ESPACO_RANK strlen(nick);//e -> espaзos
        //conforme tamanho do nick, sera adiciona X espaзos para que fique alinhado
        
for(new 0eo++)//o looping secundario
            
strcat(str" "); //adiciona espaзos
        //mostrar o score do jogador depois de alinhas os caracteres
        
format(tempsizeof(temp), "#SCORE: %d"score);
        
strcat(strtemp);//finalizaria aquela linha para repetir looping no proximo jogador
    
}
    
strcat(str"```");// fechara campo [code] apуs o looping acabar de todos os jogadores estarem no rank
    
DCC_SendChannelMessage(channel,"**`TOP 10 JOGADORES DE MAIOR SCORE:`**");//personalize de acordo sua preferencia
    
DCC_SendChannelMessage(channel,str);//mostrara resultado do TOP 10
    
return 1;

Informaзхes bбsicas:

PHP Code:
DDCMD:ip(DCC_Channel:channelDCC_User:useridparams[])//quando executarem o comando !ip
{
    
DCC_SendChannelMessage(channel,"**`IP do servidor:`** `52.xx.xxx.xxx:xxxx`");// mostrar mensagem do IP do jogador
    
return 1;
}
DDCMD:site(DCC_Channel:channelDCC_User:useridparams[])
{
    new 
str[200]="**`Site:`** https://www.brasilsaopaulo.com",temp[50];
    
//str -> serб formataзгo da menssagem 
    //temp-> formataзгo da linha antes de inserir na str 
    // %c -> char  
    //0xD, 0xA -> char quebra linha  
    
format(tempsizeof(temp), "%c%c**`Wiki:`** https://wiki.brasilsaopaulo.com%c%c",0xD0xA,0xD0xA);
    
strcat(strtemp);//junta linha formatada na string    
    
format(tempsizeof(temp), "**`Forum:`** https://forum.brasilsaopaulo.com%c%c",0xD0xA);
    
strcat(strtemp);
    
strcat(str"**`********:`** https://*******/bspserver");
    
DCC_SendChannelMessage(channel,str);//manda a mensagem que foi formata com varias linhas
    
return 1;


CREDITOS:
RazorG: Tutorial & Codigos
Xeon™: DDCMD
maddinat0r: DiscordConnector
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 2 Guest(s)