Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

karox

Rekomendowane odpowiedzi

Opublikowano

Witam

Chciałbym udostępnić wszystkim forumowiczom pokebota stworzonego przeze mnie.

Funkcje:

- Ustawienie odstępu czasu między kolejnymi poke

- Ustawienie odstępu czasu do następnego poke po wyjściu wszystkich użytkowników  z kanału

- Bot powiadamia czy administrator został poinformowany

 

Do folderu w którym będą znajdować się pliki pokebot.php oraz config.php trzeba wkleić ts3admin.class.php który trzeba pobrać z oficjalnej strony. Wystarczy wpisać w google ts3admin i znajdziecie :D

 

Udostępniam sam kod bota bez dowload'u i klasy ts3Admin ponieważ jeśli chcesz mieć dobrego bota musisz się chociaż trochę wysilić. :D

 

Główny kod bota (pokebot.php):

<?php
require('ts3admin.class.php');
require('config.php');

#Poketimer - Zmienna przechowująca date do następnego możliwego poke
$poketimer = date('r');

#tumeOfflineStatus - Zmienna przechowująca status miernika czasu służący do ustalenia tego jaką date ustawić w $poketimer
$timeOfflineStatus = 0;

#Funkcja zwracajaca tablice z informacjami o uzytkownikach obecnych na kanale $config['channel_id']
function usersOnChannel()
{
	global $tsAdmin;
	global $config;
	
	#Tworzenie tablicy z użytkownikami na kanale
	$usersTable = Array();
	
	#Pobieranie listy uzytkownikow serwera
	$clientList = $tsAdmin->clientList();
	
	#Wyszukiwanie uzytkowikow z danego kanalu
	foreach($clientList['data'] as $clientListTemp)
	{
		#Sprawdzanie na jakim kanale znajduje sie użytkownik jeżeli na właściwym przechodzi dalej
		if($clientListTemp['cid'] == $config['channel_id'])
		{
			#Przypisywanie danych uzytkownika do tymczasowej tablicy
			#{
				$table['clientNickname'] = $clientListTemp['client_nickname'];
			
				$table['clientDatabaseId'] = $clientListTemp['client_database_id'];

				$table['clientCurrentId'] = $clientListTemp['clid'];
			#}
			
			#Przypisywanie danych z tymczasowej tablicy do tablicy wyjściowej
			$usersTable[] = $table;
		}
	}
	#Zwraca tablice z użytkownikami obecnymi na kanale
	return $usersTable;
}

#Funkcja sprawdzająca czy kanał jest pusty
function channelStatus()
{
	global $tsAdmin;
	global $config;
	global $poketimer;
	global $timeOfflineStatus;
	
	#Pobieranie listy kanalow
	$channelList = $tsAdmin->channelList();
	
	#Wyszukiwanie kanalu
	foreach($channelList['data'] as $channelListTemp)
	{
		#Jesli znaleziono kanal o podanym id
		if($channelListTemp['cid'] == $config['channel_id'])
		{
			#Jesli na kanale są użytkownicy
			if($channelListTemp['total_clients'] > 0)
			{
				#Zwraca true
				return true;
			}
			
			#Jeśli status miernika jest = 0 to ustawia poketmier na czas podany w $config['time_offile']
			if($timeOfflineStatus > 0)
			{
				#Ustawia poketimer na czas podany w $config['time_offline']
				$poketimer = date('r', time() + $config['time_offline']);
				
				#Zmienia status miernika na  = 1 dzięki czemu przy następnym sprawdzaniu kanału wartość poketimer nie zostanie zwiększona
				$timeOfflineStatus = 0;
			}
			
			#Zwraca false jezeli nie ma uzytkownikow na kanale
			return false;
		}
	}
}

#Funkcja wysylajaca poke wszystkim administratorom
function poke()
{
	global $tsAdmin;
	global $config;
	global $poketimer;
	global $timeOfflineStatus;
	
	#Tablica zawierajaca id grup administratorow tworzona z $config['group']
	$adminGroups = explode(',', $config['group']);
	
	#Tablica zawierajaca liste administratorów
	$adminList = Array();
	
	#Sprawdzanie czy aktualna data jest większa niż ta zapisana w $poketimer
	if(date('r') > $poketimer)
	{
		#Wybieranie każdej grupy z listy grup administracyjnych
		foreach($adminGroups as $adminGroupsTemp)
		{
			#Pobieranie listy użytkowników wybranej grupy
			$serverGroupClientList = $tsAdmin->serverGroupClientList($adminGroupsTemp, true);
			
			#Wybiera kolejno każdego użytkownika grupy
			foreach($serverGroupClientList['data'] as $serverGroupClientListTemp)
			{
				#Sprawdzanie czy użytkownik jest aktualnie na serwerze oraz pobiera jego id
				$adminInfo = $tsAdmin->clientGetIds($serverGroupClientListTemp['client_unique_identifier']);
				
				#Jeżeli znaleziono użytkownika
				if($adminInfo['success'])
				{
					#Przypisuje jego dane do tablicy $adminList
					#{
						$table['clid'] = $adminInfo['data'][0]['clid'];
						$table['clientNickname'] = $serverGroupClientListTemp['client_nickname'];
						$table['uid'] = $adminInfo['data'][0]['cluid'];
					
						$adminList[] = $table;
					#}
				}	
			}
		}
	}
	
	#Jeżeli jestnieje tablica $adminList czyli conajmniej jeden admin jest online
	if($adminList)
	{
		#Wybieranie każdego użytkownika z listy administratorów $adminList
		foreach($adminList as $adminListTemp)
		{
			#Wysyła poke do wybranego użytkownika
			$tsAdmin->clientPoke($adminListTemp['clid'], $config['poke_message']);
			
			#Ustawia status miernika czasu na 1 dzięki czmu przy sprawdzaniu statusu kanału $poketimer zostanie zwiększony
			$timeOfflineStatus = 1;
		}
		
		#Zwiększanie licznika $poketimer o czas podany $config['time']
		$poketimer = date('r', time() + $config['time']);
		
		#Zwraca wartość true
		return true;
	}
	#Jeżeli $poketimer jest większy od aktualnej daty (poke został wcześniej wysłany)
	elseif($poketimer > date('r'))
	{
		#Zwraca wartosc true
		return true;
	}
	#Jezeli lista administratorów nie istnieje
	else
	{
		#Zwraca wartosc false
		return false;
	}
}

#Tworzenie nowego połaczenia z serwerem przy użyciu ip i portu z $config['ip'], $config['query_port']
$tsAdmin = new ts3admin($config['ip'], $config['query_port']);

#Sprawdzanie czy udalo sie połączyć z serwerem
if($tsAdmin->getElement('success', $tsAdmin->connect()))
{
	#Logowanie się do serwera z pomocą login i hasła podanego w $confi['login'], $config['password']
	$tsAdmin->login($config['login'], $config['password']);
	
	#Wybór wirtuanego serwerera ts3 przez port podany w $config['port']
	$tsAdmin->selectServer($config['port']);
	
	#Zmiana nazwy użytkownika z "serveradmin" na podaną w $config['name']
	$tsAdmin->setName($config['name']);
	
	#Zmienna gwarantująca nieskończoną ilość iteracji pentli
	$i = 0;
	
	#Utworzenie tablicy wyslanych wiadomosci aby zabezpieczyc ja przed utrata miedzy kolejnymi iteracjami pentli
	$sendedMessages = array();
	
	#Utworzenie tablicy aktywnych uzytkownikow na kanale aby zabezpieczyc ja przed utrata miedzy kolejnymi iteracjami pentli
	$send = array();
	
	#Pentla z nieskończoną ilością iteracji
	while($i >= 0)
	{
		#Sprawdzania statusu kanału przy użyciu funkcji channelStatus()
		$channelStatus = channelStatus();
	
		#Jeżeli wartość zwrotna funkcji channelStatus() jest równa true czyli kanał nie jest pusty
		if($channelStatus == true)
		{
			#Pobiera dane użytkowników na kanale za pomocą funkcji usersOnChannel()
			$usersOnChannel = usersOnChannel();
			
			#Tworzenie listy użytkowników obecnych na kanale zawierające ich id [id_użytkowinka] = [id_użytkownika]
			foreach($usersOnChannel as $usersOnChannelTemp)
			{
				$send[$usersOnChannelTemp['clientCurrentId']] = $usersOnChannelTemp['clientCurrentId'];
			}
			
			#Porównywanie listy użytkowników obecnych na kanale i użytkowników do któych wiadomość została wysłana w rezultacie otrzymuję listę z użytkownikami którzy nie dostali jeszcze wiadomości oraz których nie było na kanale w poprzedniej iteracji pentli
			$diff = array_diff($send, $sendedMessages);
			
			#Wysyłanie poke do wszystkich administratorów oraz zapis wartości zwrotnej funkcji poke() w zmiennej $pokeStatus
			$pokeStatus = poke();
			
			#Jeżeli wartość zwrotna funkcji poke() = true 
			if($pokeStatus == true)
			{
				#Wybiera każdego użytkownika z listy użytkowników którzy nie dostali wiadomości
				foreach($diff as $diffTemp)
				{
					#Wysyłanie wiadomości do użytkowników z listy z inforacją o powiadomieniu administratora
					$tsAdmin->sendMessage(1, $diffTemp, $config['Admin_online']);
				}
			}
			#Jeżeli wartość funkcji poke() = false
			else
			{
				#Wybiera każdego użytkownika z listy użytkowników którzy nie dostali wiadomości
				foreach($diff as $diffTemp)
				{
					#Wysyłanie wiadomości do użytkowników z listy z inforacją o braku powiadomieniu administratora
					$tsAdmin->sendMessage(1, $diffTemp, $config['Admin_offline']);
				}
			}
			
			#Czyszczenie tablicy z listą użytkowników do któych została wysłana wiadomośc w poprzedniej iteracji
			$sendedMessages = Array();
			
			#Tworzenie listy użytkowników do których została wysłana wiadomośc a aktualnej iteracji
			foreach($send as $sendTemp)
			{
				$sendedMessages[$sendTemp] = $sendTemp;
			}
			
			#Czyszczenie tablicy z listą użytkowników aktualnie obecnych na kanale
			$send = Array();
		}
		#Jeżeli nie ma żadnych użytkowników na kanale
		else
		{
			#Czyszczenie tablicy z listą użytkowników do których została wysłana wiadomośc w poprzedniej iteracji
			$sendedMessages = Array();
		}
		
		#Wstrzymanie wykonywania aby zapobiec wykryciu ataku typu flood
		sleep(1);
	}
}
#Jeżeli nie udało się połączyć z serwerem
else
{
	#Wyświetla informacji z ts3Admin.class
	print_r($tsAdmin);
}
?>

Config (config.php):

<?php
#Wiadomości
$config['Admin_offline'] = 'Aktualnie nie ma żadnego administratora na serwerze'; #Wiadomość jeżeli nie ma żadnego administratora na serwerze
$config['Admin_online'] = 'Administrator został powiadomiony'; #Wiadomość jeżeli jest chociaż jeden administrator na serwerze
$config['poke_message'] = 'Ktoś potrzebuje twojej pomocy!'; #Wiadomość powiadomienia administratora

#Konfiguracja czasów powiadomień
$config['time'] = 300; #Czas odstępu między kolejnymi powiadomieniami administratora(Poke) wyrażony w sekundach
$config['time_offline'] = 10; #Czas odsepu międy następnymi powiadomieniami administratora(Poke) jeżeli wszyscy użytkownicy opuścili kanał pomocy wyrażony w sekundach

#Konfiguracja połączenia
$config['ip'] = 'localhost'; #IP serwera ts3
$config['query_port'] = 10011; #Port Query serwera ts3
$config['login'] = 'serveradmin'; #Login administratora serwera ts3
$config['password'] = 'Password'; #Hasło administratora serwera ts3
$config['port'] = 9987; #Port serwera ts3

#Konfiguracja bota
$config['name'] = 'PokeBot'; #Nazwa bot
$config['channel_id'] = '208'; #Id kanału pomocy
$config['group'] = '10,20,300'; #Id grup administracyjnych. Format: $config['group'] = 'id_grupy,id_grupy,...'
?> 

Skrypt uruchamiający bota (bot.sh) (opcjonalnie):


if [ $1 = 'stop' ] 
    then 
        screen -X -S bot quit
    fi

if [ $1 = 'start' ] 
    then 
        screen -A -m -d -S bot php pokebot1.php
    fi
 

Uruchomienie za pomocą skryptu::

-bot.sh start

-bot.sh stop

 

Uruchomienie bez skryptu:

-screen php pokebot.php

 

Zalecam napisanie skryptu który będzie restartował bota co jakiś czas ponieważ może się tak zdarzyć że po jakimś czasie poke nie będzie wysyłany do administratorów. Nie wiem czemu tak się dzieje ale czasem zdarzają się tego typu problemy jeżeli bot nie jest restartowany.

Opis może być średnio napisany, przepraszam ;) jeśli masz chociaż trochę inteligencji i ogarniasz php powinieneś wszystko zrozumieć.

 

Pozwalam na dowolną edycję kodu i udostępnianie na innych forach z podaną nazwą autora (Exus).

 

Jeśli masz jakieś propozycje co do nowych funkcji bota, poprawy tego kodu lub potrzebujesz jakiegoś skryptu/bota na ts3 pisz w komentarzu to może się jakoś dogadamy ;)

Opublikowano

Wątpie że przyjmie się ten pokebot, ponieważ większość właścicieli serwerów Ts jest zielonych.

Plus za udostępnienie, lecz lepszym rozwiązaniem w takim przypadku jest JTS3Bot który ma pokebot'a (:

Opublikowano

Wątpie że przyjmie się ten pokebot, ponieważ większość właścicieli serwerów Ts jest zielonych.

Plus za udostępnienie, lecz lepszym rozwiązaniem w takim przypadku jest JTS3Bot który ma pokebot'a (:

JTS3 jest lepszy? hahahah dobre xD

 

  • Inactive Channel Check can delete a channel, if it's empty for X hours. (since version 5.2)
  • Auto Moves clients of specified server groups to specified channels on connection. (since version 3.6.3)
  • Channel Notify sends a message to specified clients, if clients join a specified channel. (since version 3.7)
  • Server Group Notify sends a message to specified clients, if members of a specified server group connects to TS3 server. (since version 3.6.2)
  • Server Group Protection to kick people which are unauthorized member of a protected server group. (since version 3.0)
  • Bad nickname check to kick people with a bad name from the server. (since version 3.0)
  • Bad channel name check to delete channels with a bad name. (since version 3.0)
  • Move idle users to another channel and sends a message.
  • Kick idle users with a kick reason. (since version 2.0)
  • Send a warning message if someone is idle.
  • Move to a specified channel if client status is away (after some seconds idle), can move back if not away anymore (move back since version 2.0)
  • Move to a specified channel if client status is headphone or microphone muted (after some seconds idle), can move back if not muted anymore (since version 3.0)
  • Move recording users to another channel and sends a message
  • Kick recording users from server with a kick reason
  • Send a message every X minutes to virtual server or a special channel
  • Send a welcome message to every connecting client, can send a special welcome message to specified server group members
  • !lastseen chat command to see somebody's last online time.

Gdzie tu masz PokeBota ? ....

 

@temat@ 

 

Git pokebot ;)

Opublikowano

@Itan

Wydaje mi się że JTS3 nie ma pokebota a nawet jeśli ma nie jest on tak prosty w konfiguracji.

Tan bot nie ma się przyjmować i nie ma być dla zupełnie zielonych właścicieli ts3 którzy nic nie ogarniają tylko dla tych osób które nie czują się zbyt dobrze w php lub go nie znają ale ogarniają jakiekolwiek podstawy. ;)

 

Jeżeli ktoś chce automatyczny restart bota to te dwa pliki mogą się przydać:

 

core.sh (Restartuje bota co 12h [sleep 12h])

#!/bin/bash
i=1;
while [ $i -le 10 ]; do
        screen -A -m -d -S bot php pokebot1.php
	sleep 12h
	screen -X -S bot quit
done

bot.sh

#!/bin/bash
if [ $1 = 'stop' ] 
    then 
        screen -X -S botcore quit
        screen -X -S bot quit
    fi

if [ $1 = 'start' ] 
    then
	screen -A -m -d -S botcore sh core.sh
    fi

@KlassKai..

Domyślam się że coś można zmienić i poprawić ale jeszcze nie przeczytałem żadnego poradnika o php a moja nauka tego języka opiera się na analizie innych skryptów  :D

Opublikowano

@Casual

Kłaniają się podstawy angielskiego i czytanie ze zrozumieniem.

 

@karox

Oczywiście że JTS3Bot ma funkcje pokebot'a lecz "pseudo" technicy nawet o tym nie wiedzą (:

Opublikowano

@Itan

Pseudo czyli tacy jak ja. :D

Możliwe raz w życiu miałem go na komputerze i stwierdziłem że jednak nie jest mi potrzebny :D

 

Channel Notify sends a message to specified clients, if clients join a specified channel

 

Wysyła wiadomość dla określonego użytkownika jeśli użytkownik wejdzie na określony kanał.

 

ehm 

BTW. 263 linijki pozdrawiam. Połowa "funkcji" jest tutaj nie potrzebna imo. 100 razy szybciej można to zrobić i zmieścić się w 100 paru linijkach spokojnie.

Opublikowano

@matej654321

263 linijki w tym komentarze i formatowanie.

Zrób bota mieszczącego się w 100 paru linijkach o identycznych parametrach jak ten. Powodzenia ;)

No chyba że nie będziemy używać ts3Admin.class ale w tego typu projekty nie chce mi się bawić.

 

Skoro patrzysz na skrypty przez pryzmat ilości linijek to powodzenia w przyszłości i programowaniu czegokolwiek. ;)

<?php
require('ts3admin.class.php');
require('config.php');
$poketimer = date('r');
$timeOfflineStatus = 0;
function usersOnChannel(){
	global $tsAdmin;
	global $config;
	#Tworzenie tablicy z użytkownikami na kanale
	$usersTable = Array();
	$clientList = $tsAdmin->clientList();
	foreach($clientList['data'] as $clientListTemp){
		if($clientListTemp['cid'] == $config['channel_id']){
			$table['clientNickname'] = $clientListTemp['client_nickname'];		
			$table['clientDatabaseId'] = $clientListTemp['client_database_id'];
			$table['clientCurrentId'] = $clientListTemp['clid'];
			$usersTable[] = $table;}}
	return $usersTable;}
function channelStatus(){
	global $tsAdmin;
	global $config;
	global $poketimer;
	global $timeOfflineStatus;
	$channelList = $tsAdmin->channelList();
	foreach($channelList['data'] as $channelListTemp){
		if($channelListTemp['cid'] == $config['channel_id']){
			if($channelListTemp['total_clients'] > 0){
				return true;}
			if($timeOfflineStatus > 0){
				$poketimer = date('r', time() + $config['time_offline']);
				$timeOfflineStatus = 0;}
			return false;}}}
function poke(){
	global $tsAdmin;
	global $config;
	global $poketimer;
	global $timeOfflineStatus;
	$adminGroups = explode(',', $config['group']);
	$adminList = Array();
	if(date('r') > $poketimer){
		foreach($adminGroups as $adminGroupsTemp){
			$serverGroupClientList = $tsAdmin->serverGroupClientList($adminGroupsTemp, true);
			foreach($serverGroupClientList['data'] as $serverGroupClientListTemp){
				$adminInfo = $tsAdmin->clientGetIds($serverGroupClientListTemp['client_unique_identifier']);
				if($adminInfo['success']){
				$table['clid'] = $adminInfo['data'][0]['clid'];
				$table['clientNickname'] = $serverGroupClientListTemp['client_nickname'];
				$table['uid'] = $adminInfo['data'][0]['cluid'];
				$adminList[] = $table;}	}}}
	if($adminList){
		foreach($adminList as $adminListTemp){
		$tsAdmin->clientPoke($adminListTemp['clid'], $config['poke_message']);
		$timeOfflineStatus = 1;}
		$poketimer = date('r', time() + $config['time']);
		return true;}
	elseif($poketimer > date('r')){
		return true;}
	else{
		return false;}}
$tsAdmin = new ts3admin($config['ip'], $config['query_port']);
if($tsAdmin->getElement('success', $tsAdmin->connect())){
	$tsAdmin->login($config['login'], $config['password']);
	$tsAdmin->selectServer($config['port']);
	$tsAdmin->setName($config['name']);
	$i = 0;
	$sendedMessages = array();
	$send = array();
	while($i >= 0){
		$channelStatus = channelStatus();
		if($channelStatus == true){
			$usersOnChannel = usersOnChannel();
			foreach($usersOnChannel as $usersOnChannelTemp){
			$send[$usersOnChannelTemp['clientCurrentId']] = $usersOnChannelTemp['clientCurrentId'];}
			$diff = array_diff($send, $sendedMessages);
			$pokeStatus = poke();
			if($pokeStatus == true){
				foreach($diff as $diffTemp){
				$tsAdmin->sendMessage(1, $diffTemp, $config['Admin_online']);}}
			else{
				foreach($diff as $diffTemp){
				$tsAdmin->sendMessage(1, $diffTemp, $config['Admin_offline']);}}
			$sendedMessages = Array();
			foreach($send as $sendTemp){
				$sendedMessages[$sendTemp] = $sendTemp;}
			$send = Array();
			}
		else{
			$sendedMessages = Array();}
		sleep(1);}}
else{
	print_r($tsAdmin);}
?>

Proszę bardzo 92 linijki ten sam bot. Można można i życzę powodzenia w analizie kodu. :D

 

I nie żebym coś do ciebie miał tylko nie wieżę w to że zrobisz takiego bota w 150 linijkach z kodem przyjaznym do analizy dla każdego i dla siebie w przyszłości. 

Bez obrazy :D

Opublikowano

@matej654321

263 linijki w tym komentarze i formatowanie.

Zrób bota mieszczącego się w 100 paru linijkach o identycznych parametrach jak ten. Powodzenia ;)

No chyba że nie będziemy używać ts3Admin.class ale w tego typu projekty nie chce mi się bawić.

 

Skoro patrzysz na skrypty przez pryzmat ilości linijek to powodzenia w przyszłości i programowaniu czegokolwiek. ;)

<?php
require('ts3admin.class.php');
require('config.php');
$poketimer = date('r');
$timeOfflineStatus = 0;
function usersOnChannel(){
	global $tsAdmin;
	global $config;
	#Tworzenie tablicy z użytkownikami na kanale
	$usersTable = Array();
	$clientList = $tsAdmin->clientList();
	foreach($clientList['data'] as $clientListTemp){
		if($clientListTemp['cid'] == $config['channel_id']){
			$table['clientNickname'] = $clientListTemp['client_nickname'];		
			$table['clientDatabaseId'] = $clientListTemp['client_database_id'];
			$table['clientCurrentId'] = $clientListTemp['clid'];
			$usersTable[] = $table;}}
	return $usersTable;}
function channelStatus(){
	global $tsAdmin;
	global $config;
	global $poketimer;
	global $timeOfflineStatus;
	$channelList = $tsAdmin->channelList();
	foreach($channelList['data'] as $channelListTemp){
		if($channelListTemp['cid'] == $config['channel_id']){
			if($channelListTemp['total_clients'] > 0){
				return true;}
			if($timeOfflineStatus > 0){
				$poketimer = date('r', time() + $config['time_offline']);
				$timeOfflineStatus = 0;}
			return false;}}}
function poke(){
	global $tsAdmin;
	global $config;
	global $poketimer;
	global $timeOfflineStatus;
	$adminGroups = explode(',', $config['group']);
	$adminList = Array();
	if(date('r') > $poketimer){
		foreach($adminGroups as $adminGroupsTemp){
			$serverGroupClientList = $tsAdmin->serverGroupClientList($adminGroupsTemp, true);
			foreach($serverGroupClientList['data'] as $serverGroupClientListTemp){
				$adminInfo = $tsAdmin->clientGetIds($serverGroupClientListTemp['client_unique_identifier']);
				if($adminInfo['success']){
				$table['clid'] = $adminInfo['data'][0]['clid'];
				$table['clientNickname'] = $serverGroupClientListTemp['client_nickname'];
				$table['uid'] = $adminInfo['data'][0]['cluid'];
				$adminList[] = $table;}	}}}
	if($adminList){
		foreach($adminList as $adminListTemp){
		$tsAdmin->clientPoke($adminListTemp['clid'], $config['poke_message']);
		$timeOfflineStatus = 1;}
		$poketimer = date('r', time() + $config['time']);
		return true;}
	elseif($poketimer > date('r')){
		return true;}
	else{
		return false;}}
$tsAdmin = new ts3admin($config['ip'], $config['query_port']);
if($tsAdmin->getElement('success', $tsAdmin->connect())){
	$tsAdmin->login($config['login'], $config['password']);
	$tsAdmin->selectServer($config['port']);
	$tsAdmin->setName($config['name']);
	$i = 0;
	$sendedMessages = array();
	$send = array();
	while($i >= 0){
		$channelStatus = channelStatus();
		if($channelStatus == true){
			$usersOnChannel = usersOnChannel();
			foreach($usersOnChannel as $usersOnChannelTemp){
			$send[$usersOnChannelTemp['clientCurrentId']] = $usersOnChannelTemp['clientCurrentId'];}
			$diff = array_diff($send, $sendedMessages);
			$pokeStatus = poke();
			if($pokeStatus == true){
				foreach($diff as $diffTemp){
				$tsAdmin->sendMessage(1, $diffTemp, $config['Admin_online']);}}
			else{
				foreach($diff as $diffTemp){
				$tsAdmin->sendMessage(1, $diffTemp, $config['Admin_offline']);}}
			$sendedMessages = Array();
			foreach($send as $sendTemp){
				$sendedMessages[$sendTemp] = $sendTemp;}
			$send = Array();
			}
		else{
			$sendedMessages = Array();}
		sleep(1);}}
else{
	print_r($tsAdmin);}
?>

Proszę bardzo 92 linijki ten sam bot. Można można i życzę powodzenia w analizie kodu. :D

 

I nie żebym coś do ciebie miał tylko nie wieżę w to że zrobisz takiego bota w 150 linijkach z kodem przyjaznym do analizy dla każdego i dla siebie w przyszłości. 

Bez obrazy :D

 

Jak to nie tak to w 30 można się zmieścić lel. Nie potrzebnie tworzysz cały czas zbędne tablice.

Opublikowano

Tak odbiegając oo bota którego napisał autor . Ja mam pytanie co do tego JTS3ServerMod mianowicie gdzie jest opcja w którym również użytkownik który wszedł na kanał dostał poke o poinformowaniu administracji że jest na kanale . Administracja otrzymuje ale chciałbym aby użytkownik który wszedł na kanał również otrzymał Poke że admini zostali poinformowani o jego pobycie na kanale . A druga sprawa jak edytować pliki w tym bocie aby wysyłało poke z 4 kanałów które wybrałem aby informowały o obecności użytkownika ? Będę wdzięczny za pomoc i dam max Like :)

Opublikowano

@Bombel93

 

Najprościej to odpalić sobie 4 razy bota z inną konfiguracją :D tylko musisz skrypt startowy edytować żeby screen każdego bota miał inną nazwę czyli po komendzie screen i parametrach pierwsza jest nazwa screena która w każdym bocie musi być inna jeżeli mają działać wszystkie razem.

 

Innym sposobem jest stworzenie od razu za pentlą while pentlę foreach z tablicą która zawiera id wszystkich kanałów które mają być sprawdzane. To prawdopodobnie zadziała chociaż pewien nie jestem sprawdzę to i podeślę kod. ;)

  • 3 tygodnie później...
Opublikowano

Praktycznie wszystko ok. Bot wbija na serwer i wysyła wiadomość dla użytkownika na kanale. Tylko nie połka admina kiedy ktoś jest na centrum pomocy wie ktoś czemu ?

Opublikowano

Praktycznie wszystko ok. Bot wbija na serwer i wysyła wiadomość dla użytkownika na kanale. Tylko nie połka admina kiedy ktoś jest na centrum pomocy wie ktoś czemu ?

Podałeś dobre id rangi w bocie?

Query ma odpowiednią moc poke do adminów?

Sprawdź te dwie rzeczy.

  • 2 tygodnie później...
  • 5 tygodni później...
Opublikowano

Witam Bot nie chce zadziałać jak odpalam za pomocą ./bot.sh start to wywala błąd :

./bot.sh start
./bot.sh: line 11: syntax error: unexpected end of file
 
 
ktoś pomoze ?
1325845644-U48159.gif
Opublikowano

Odpal tak: screen -A -m -d -S bot php pokebot.php

 

Wyślij screen z folderem oraz pokaż config :) 

Opublikowano

Nadaj :

 

chmod 777 bot.sh

./bot.sh start

if [ $1 = 'stop' ]

then

screen -X -S bot quit

fi

 

if [ $1 = 'start' ]

then

screen -A -m -d -S bot php pokebot.php

fi

 

 

Wklej to ponieważ był błąd w nazwie.

Opublikowano

Nadaj :

 

chmod 777 bot.sh

./bot.sh start

if [ $1 = 'stop' ]

then

screen -X -S bot quit

fi

 

if [ $1 = 'start' ]

then

screen -A -m -d -S bot php pokebot.php

fi

 

 

Wklej to ponieważ był błąd w nazwie.

jest jeszcze jeden problem jak odpalam bota w terminalu to wyskakuje błąd : 

 

PHP Notice:  Undefined index: client_unique_identifier in /home/toor/Desktop/bot12/pokebot.php on line 113
jak wchodzę w pokebot.php i daje na linie 113 to jest coś tam takiego : 

#Sprawdzanie czy użytkownik jest aktualnie na serwerze oraz pobiera jego id
$adminInfo = $tsAdmin->clientGetIds($serverGroupClientListTemp['client_unique_identifier']);
 
Ktos ma jakieś rozwiązanie ? 
1325845644-U48159.gif

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...