Quantcast
Channel: SA-MP Forums
Viewing all articles
Browse latest Browse all 18226

[Tutorial] Implementação Discord + SA:MP [Rank/Comandos/Informações]

$
0
0
:)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.
  • Vá para https://discordapp.com/developers/applications/me
  • clique em "new app"
  • insira um nome para o seu bot
  • clique em "create application
  • pressione "create bot user"
  • você agora tem um bot token!
  • o adicione esse bot ao seu servidor, copie o ID do cliente do seu aplicativo recém-criado, insira-o no link abaixo e abra esse link:
    Code:

    https://discordapp.com/api/oauth2/authorize?client_id=YOURCLIENTIDGOESHERE&scope=bot&permissions=0


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:

discord_bot_token discord-connector
Instale o processador de comandos DDCMD:

Instale o DDCMD para que possa trabalhar facilmente com comandos no discord!
https://pastebin.com/j7p46fQX

em seu gamemode ficara assim:

Code:

#define DCC_COMMAND_PREFIX '!'                        //opcional, caso queria mudar o prefixo do comando

#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

Viewing all articles
Browse latest Browse all 18226

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>