Bot na czacie – odpisywanie jednym losowym tekstem

0

Witam, zrobiłem takiego małego bocika i zrobiłem takie 2 pliczki:

czat.php

<?php
$file = "data.php";
$current = file_get_contents($file);
$data = $current ."\n". file_get_contents('php://input');
file_put_contents ( $file , $data  );

czat2.php

<?php
  require_once('MessageBuilder.php');
  $M=new MessageBuilder();
  switch (file_get_contents("data.php")) {
    default: $M->addText(file_get_contents("data.php"));

  }
$M->reply();

Gdy napisze się do bota oczywiście zapisuje się to co do niego się napisało w data.php jednak odsyła razem z tym co się wcześniej napisało.

Pytanie; Jak zrobić żeby odpisywał jednym losowym tekstem?? Próbówałem wszystkich funkcji losowania jednak nic się nie udawało

0

:) W takim razie Ty chyba krytyki nie słyszałeś :) No ale już piszę:

  1. Nie wiemy totalnie jak ma działać Twoja aplikacja
  2. Z kodu widzę że w pliku data.php masz zbiór tekstów - i dopisujesz do niego to co dostajesz z php:input (mówię o pliku czat.php)
  3. Następnie tworzysz obiekt MessageBuildera - nie wiemy jak on wygląda, jak działa itp itd, więc dla nas to po raz kolejny wróżenie z fusów
  4. Robisz switch na ciągu znaków który z opisu w czat.php może się zmieniać - więc jest to konstrukcja bez sensu, tym bardziej jedyną instrukcją w switchu jest default - czyli: nie wiesz w ogóle do czego służy switch - ja Ci tego tłumaczyć nie będę, bo od tego jest manual phpa i miliony stron w necie
  5. Nadal nie wiemy jak działa MessageBuilder, a co za tym idzie jak działa metoda addText()
  6. Wielokrotnie odczytujesz plik data.php - co jest o tyle problematyczne, bo ten plik może zmienić się w locie

Zalecenia:

  1. Zawartość pliku odczytuj tylko raz (przypisz zawartość do zmiennej i operuj na niej)
  2. Nie rób bezsensownych switch'y
  3. Jak odczytasz zawartość pliku - to przekonwertuj to na postać np tablicy, gdzie każdy wiersz w pliku to kolejny indeks w tablicy czyli
$responses = [
 0 => "No siema",
 1 => "Dzień dobry",
....
];
  1. Jak już załadujesz takie odpowiedzi - to użyj funkcji rand - aby pobrać losowy indeks.
  2. Twoje podejście nie uwzględnia żadnych kontekstów tego co ktoś piszę, więc miej na uwadze że Twój bot na tekst Dzień dobry może odpisać Do widzenia (o ile będziesz miał takie teksty w tym pliku)
  3. Zrób chociaż jakąś walidację tego co użytkownik może dopisać do tego pliku, bo jeszcze ktoś Ci coś zepsuje

Nie wiemy jak wygląda plik data.php, nie wiemy jak wygląda klasa MessageBuildera, nie wiemy jak składujesz dane z tekstami, nie wiem jakie dane dostajesz na wejściu, tak więc w Twoim kodzie nie brakuje tylko rand() - a moim zdaniem - o wiele więcej. Dodatkowo jeśli sam nie rozumiesz kodu który napisałeś, a na to mi wygląda, nam tym bardziej będzie kłopotliwe napisanie Ci dobrej porady, która rozwiąże Twój problem. Wrzuć tutaj poprawiony, kompletny kod, zadaj konkretne pytanie i wtedy jeśli będzie to miało sens - na pewno dostaniesz porządną odpowiedź.

No i jeszcze raz polecam przejść kursy, tutki, czytać manuala do phpa.

0

Tu chodzi o Bota na gg
W załącznikach daje MessageBuilder

Plik data.php jest pusty, zapełnia się jeśli coś się napisze do bota

A tutaj jest pełniejszy przykład: https://boty.gg.pl/przyklady/

0

Wywnioskowałem to już z innych Twoich postów - ale nadal brak Ci podstaw. Nie rzucaj się z motyką na słońce, spytam też inaczej
co Twoim zdaniem robi ta linijka kodu?
$M->addText(file_get_contents("data.php"));

0

ta linijka to jak się napisze do bota to bot odpisuje słowem, zdaniem z data.php

1

No to idziemy łopatologicznie z tłumaczeniem - skoro 5 osób napisze tekst do bota, to co robi ta linijka $M->addText(file_get_contents("data.php")); ?
Napisałeś "ta linijka to jak się napisze do bota to bot odpisuje słowem, zdaniem z data.php" - co nie jest prawdą - bo bot odpisze wszystkimi tekstami jakie się tam znajdą - dla mnie to oznacza, że niestety ale nie masz jeszcze pojęcia o tym co robisz i piszesz. Podkreślam "jeszcze" - bo masz do tego pełne prawo, żeby czegoś nie wiedzieć. Niestety ja nie mogę sobie pozwolić na to by tłumaczyć Ci podstawy działania - to tak jakbyś chciał obliczać całki z matmy, a nie wiedział jak się dzieli/mnoży. Najpierw podstawy, potem ambitniejsze programy.

0

dokładnie mi o to cały czas chodzi że bot odpisuje wszystkimi tekstami jakie się tam znajduje dlatego potrzebuje funkcji losowania by odpisywał jednym losowym tekstem

0

O tym też już Ci napisałem - Jak odczytasz zawartość pliku - to przekonwertuj to na postać np tablicy, gdzie każdy wiersz w pliku to kolejny indeks w tablicy....

0

jeszcze jedno
switch (file_get_contents("data.php")) {
jest potrzebny, ponieważ bez tego pojawia się błąd Błąd - serwer nie zwrócił poprawnej wiadomości do wysłania (500 Internal Server Error).

0

Usunąłeś tylko linijkę dotyczącą switcha + default, czy wywaliłeś całą sekcję?
Jak widzisz zwróciło Ci 500, czyli przydała by się znajomość HTTP status code, gdzie 500 sugeruje jasno, że coś się wywaliło na serwerze podczas przetwarzania requestu.

0
axelbest napisał(a):

O tym też już Ci napisałem - Jak odczytasz zawartość pliku - to przekonwertuj to na postać np tablicy, gdzie każdy wiersz w pliku to kolejny indeks w tablicy....

a jak to zrobić?

0

Poszukać tych informacji w google - jak nie uda się to spróbować tego samego ale wpisując frazy w języku angielskim np "php how to convert file to array". Programowanie w dużej mierze opiera się na samodzielnej pracy - teraz masz bardzo proste problemy i musisz nauczyć się je sam rozwiązywać. W przeciwnym razie - z każdym problemem będziesz pisał tutaj. To nie jest jakieś "rocket science", to są podstawy. Naucz się korzystać z google, przeglądaj stackoverflow i rób wszystko powoli i dokładnie - jak nie wiem co się dzieje w kodzie to nie wiem... wal jakieś echo/var_dumpy/exity/ albo pokuś się o użycie debuggera.

0

to chyba jednak nie dla mnie, bez kogoś kto mi nie pomoże raczej sobie nie poradzę, więc się chyba poddam

0

po przeróbce delikatnej plik czat.php wygląda tak:

<?php
$file = "data.php";
$current = file_get_contents($file);
$data = $current ."\n". file_get_contents('php://input');
file_put_contents ( $file , $data  );
print_r(file("data.php"));
?>

po napisaniu wiadomości hej i co tam bot nadal odpisuje wszystkim jednak zmieniło się trochę na takie:
title

0

kolejna zmiana, czat2.php wywaliłem i tak teraz wygląda czat.php:

<?php
  require_once('MessageBuilder.php');
  $M=new MessageBuilder();
$file = "data.php";
$current = file_get_contents($file);
$data = $current ."\n". file_get_contents('php://input');
file_put_contents ( $file , $data  );
print_r(file("data.php"));
rand(file("data.php"));
?>
0

Zacznij od podstaw - pisz po max 10 linjek kodu sprawdzaj jak działają. Używaj chociażby var_dump'a zeby sprawdzać jaką wartość ma zmienna. Przeczytaj ze zrozumieniem od A do Z jakąś książkę o php'ie. Teraz twierdzisz, że nie wiesz czego się uczyć, ale jak widzę robisz to źle - po tym jak piszesz kod widzę, że podstawiasz losowy kod w losowe miejsca i liczysz na to że coś wyjdzie. Zakładam że wcześniej przy może mniejszych rzeczach coś Ci tą metodą się udawało. Ale jednak musisz wiedzieć jakie są podstawowe typy danych w programowaniu i jak działają (co widać wyżej gdzie nie wiesz nawet jak działają arraye).

Ja nie chce Cię zniechęcać, chce tylko żebyś nauczył się uczyć.

0

ale po co mam się uczyć czegoś co mi się nie przyda, napiszcie na co mam najbardziej mam zwrócić uwagę

0

Skoro zakładasz że Ci się nie przyda to po co zakładałeś temat i smuty walisz, że nie dajesz rady? Jeśli masz mniej niż 12 lat to jeszcze zrozumiem... ale jeśli masz więcej - to chyba wiesz, że nikt Cie za rączkę nie będzie prowadził. A jak chcesz prowadzenia to będziesz musiał zapłacić - czas to pieniądz. Ja mogę Ci udzielić korepetycji 75pln/h.

0

uwaga uwaga! udało mi się całkiem przez przypadek :D potestuje troche to się pomyśli bardziej nad rozbudowaniem :D

plik czat.php wygląda tak:

<?php


$lines = file('data.php');

echo $lines[array_rand($lines)];

?>

plik czat2.php tak:

<?php
  require_once('MessageBuilder.php');
  $M=new MessageBuilder();

$file = "data.php";
$current = file_get_contents($file);
$data = $current ."\n". file_get_contents('php://input');
file_put_contents ( $file , $data  );

1 użytkowników online, w tym zalogowanych: 0, gości: 1