https://discordapp.com/api/oauth2/authorize?client_id=YOURCLIENTIDGOESHERE&scope=bot&permissions=0
discord_bot_token YOUR_BOT_TOKEN_HERE
plugins discord-connector
new DCC_COMMAND_PREFIX[]= {'!','+','/'}; //opcional se quiser personalizar seus prefixos! #include <discord-connector> //livraria do bot no discord! #include <discord-cmd> //comandos discord
#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:channel, DCC_User:author, const message[]);
hook OnGameModeInit()
{
g_ChatGlobal = DCC_FindChannelById( DC_CHATGLOBAL); //localisar seu chat pretendido
return Y_HOOKS_CONTINUE_RETURN_1;
}
hook OnPlayerText(playerid, text[])
{
new message[200];
format(message, 200, "**`%s`** [%d] -> *`%s`*", GetPlayerNameEx(playerid), playerid, text);//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:channel, DCC_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(msg, sizeof(msg), "[Discord] {00AAFF}%s{FFFFFF}: %s", GetNickDiscord(author), message); //formate de acordo com seu gosto
SendClientMessageToAll(0xFFFFFFFF, msg); //enviara mesnagem para todos os players
return 1;
}
stock IsDiscordBot(DCC_User:author) //funзгo simplificada
{
new bool:Isabot;
DCC_IsUserBot(author, Isabot);
return Isabot;
}
DDCMD:rank(DCC_Channel:channel, DCC_User:userid, params[])//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 i = 0; i < rows; i++)//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(temp, sizeof(temp), "%c%c[%02d] %s", 0xD, 0xA, i+1, nick);
strcat(str, temp);//colocara a linha formata na string str
//conta o tamanho do nick
new e = ESPACO_RANK - strlen(nick);//e -> espaзos
//conforme tamanho do nick, sera adiciona X espaзos para que fique alinhado
for(new o = 0; o < e; o++)//o looping secundario
strcat(str, " "); //adiciona espaзos
//mostrar o score do jogador depois de alinhas os caracteres
format(temp, sizeof(temp), "#SCORE: %d", score);
strcat(str, temp);//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;
}
DDCMD:ip(DCC_Channel:channel, DCC_User:userid, params[])//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:channel, DCC_User:userid, params[])
{
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(temp, sizeof(temp), "%c%c**`Wiki:`** https://wiki.brasilsaopaulo.com%c%c",0xD, 0xA,0xD, 0xA);
strcat(str, temp);//junta linha formatada na string
format(temp, sizeof(temp), "**`Forum:`** https://forum.brasilsaopaulo.com%c%c",0xD, 0xA);
strcat(str, temp);
strcat(str, "**`********:`** https://*******/bspserver");
DCC_SendChannelMessage(channel,str);//manda a mensagem que foi formata com varias linhas
return 1;
}
Sobre sincronizar o chat.. ok bacana, й um dos mйtodos para fazer isto mais eficientes, agora quanto aos ranks realmente decepcionante vocк trazer um processamento desnecessбrio para pawn, enquanto pode ser feito facilmente com quaisquer outra linguagem de forma externa, assim livrando seu servidor.
|
todo caso й aqui й sу um tutorial, nenhum dos meus exemplos estб 100% ao meu servidor, tem mais features, e proteзхes! cabe ao usuбrio saber o que precisa |
aos ranks realmente decepcionante vocк trazer um processamento desnecessбrio para pawn, enquanto pode ser feito facilmente com quaisquer outra linguagem de forma externa, assim livrando seu servidor.
|