Witam po raz kolejny.
Wiem, że nagminnię tu truję…
Ale znów mam problem. A mianowicie: postanowiłem owego irc bota podzielić na oddzielne moduły.
Czytałem o load i require. Postanowiłem użyć load. A więc na przykład chciałbym napisać moduł,
pełniący prostą funkcję sprawdzania, czy działa.
module Tescik
def test(sock)
case sock.strip
when /^:(.+?)!(.+?)@(.+?)\sPRIVMSG\s(.+)\s:test$/i
send "PRIVMSG #{$4} : Dziala."
end
end
end
sock to strumień danych z socketa, który jest odbierany w pliku “głównym” bota. Załóżmy, że ten kod powyżej, to jest plik modul.rb.
No i chcę go załadować i wykorzystać. Tzn zgodnie z wyrażeniem regularnym po napisaniu “test” na kanale
bot powinien wysłać w odpowiedzi: Dziala. Jeśli użyję tego w ten sposób, że dam w pętli wykonanie test(sock) w pliku “głównym” bota, nie przyniesie to oczekiwanego rezultatu. Ba, żadnego rezultatu nie przyniesie. Czyżbym źle do tego podchodził?
Jak powinienem wcielić ten kawałek kodu z modul.rb w “życie”?
Co do nazwania modułu, to wiem. Pisałem “w locie” i przeoczyłem, ale już poprawiłem.
Wywala mi błąd: uninitialized constant IRCbot::Tescik (NameError)
Wydaje mi się, że wszystko ok. Nie wiem co może być przyczyną. Kod modułu jak powyżej.
I do tego w klasie bota: include Tescik
Teoretycznie mogłbyś przejść po metodach dostępnych w module i usunąć je z klasy, ale wydaje się to niezłym hackiem. Co konkretnie chcesz osiągnąć lub jaki problem rozwiązać w ten sposób?
Jak już pisałem wyżej, dzielę irc bota na moduły. Np: mam główny plik bota z obsługą ładowania/wyładowywania modułów, a cała
reszta bota, to już moduły w oddzielnych plikach. Chcę załóżmy, by witał wchodzących na kanał i reagował na słowo “czesc”.
Piszę w tym celu dwa moduły. Każdy w oddzielnym pliku. Jednak chciałbym, aby dało się je “włączać i wyłączać” komendą dla bota.