Development > Module Requests

A Topic Command

(1/2) > >>

Jmrxxx:
I was thinking it would be nice to have a !topic or !settopic command so that when someone sends a tell to the bot they can see whattheyare joining in on. Also this way when someone from inside the chat does an !invite <player> when the bot invites them, it will also show them the topic?

Unless I am miissing this.. I dont believe one exists :)

Derroylo:
Well i have one but it isnĀ“t compatible with the normal bebot :(

Zacix:
This topicmodule works ONLY if you have followed my guide for upgrading to a PHP5 and raidbot *clicky*. Although, shouldn't be too hard to change the code so it works for PHP4.


--- Code: ---<?php

require_once("./includes/_colors.php");

$topic = new Topic($bot);


$commands["tell"]["topic"] = &$topic;
$commands["tell"]["cleartopic"] = &$topic;
$commands["pgmsg"]["topic"] = &$topic;
$commands["pgjoin"][] = &$topic;

class Topic{
  private $bot;
  private $topic;
  private $time;
  private $name;

  public function Topic(&$bot) {
    $this->bot = &$bot;
    $this->topic = "";
    $this->time = gmmktime();
    $this->name = "";
  }
  
  public function tell($name,$msg) {
    $msg = explode(" ",$msg);
    if(strtolower($msg[0]) == "!topic") {
      if($msg[1] != "") {
        $this->topic = implode(" ",array_slice($msg,1));
        $this->time = gmmktime();
        $this->name = $name;
        $this->bot->aoc->send_tell($name,Infotext("New topic set."));
      }
      else {
        if($this->topic != "") {
          $this->bot->aoc->send_tell($name,Infotext($this->topic . " [" . Highlight(date("Y-M-d H:i",$this->time)) . " GMT]." . "Set by [" . Highlight($this->name) . "]"));
        }
        else {
          $this->bot->aoc->send_tell($name,Infotext("No topic since [" . Highlight(date("Y-M-d H:i",$this->time)) . " GMT]"));
        }
      }
    }
    else if(strtolower($msg[0]) == "!cleartopic") {
      $this->topic = "";
      $this->time = gmmktime();
      $this->bot->aoc->send_tell($name,Infotext("Topic is cleared"));
    }
  }
  
  public function pgmsg($name, $msg) {
    if($this->topic != "") {
      $this->bot->send_pgroup(Infotext($this->topic . " [" . Highlight(date("Y-M-d H:i",$this->time)) . " GMT]." . "Set by [" . Highlight($this->name) . "]"));
    }
    else {
      $this->bot->send_pgroup(Infotext("No topic since [" . Highlight(date("Y-M-d H:i",$this->time)) . " GMT]"));
    }
  }
  
  public function pgjoin($name) {
    if($this->topic != "") {
      $this->bot->aoc->send_tell($name,Infotext($this->topic . " [" . Highlight(date("Y-M-d H:i",$this->time)) . " GMT]." . "Set by [" . Highlight($this->name) . "]"));
    }
    else {
      $this->bot->aoc->send_tell($name,Infotext("No topic since [" . Highlight(date("Y-M-d H:i",$this->time)) . " GMT]"));
    }
  }
}

--- End code ---
[/url]

Alreadythere:
Here my topic module - which should work with the unmodified bot.

There is no check for access rights in any of those functions though, so everybody can change the topic.


--- Code: ---<?php
/*
* Topic Module for BE Bot <http://bebot.fieses.net>
* Module coded by Alreadythere
*/


  // add the default settings, if not existing
  $db -> query("INSERT IGNORE INTO settings (setting, value) VALUES ('topic', '')");
  $db -> query("INSERT IGNORE INTO settings (setting, value) VALUES ('topictime', '0')");
  $db -> query("INSERT IGNORE INTO settings (setting, value) VALUES ('topic_setter', '')");




$topic = new Topic($bot);

$commands["pgjoin"][] = &$topic;
$commands["pgmsg"]["edittopic"] = &$topic;
$commands["pgmsg"]["topic"] = &$topic;
$commands["tell"]["edittopic"] = &$topic;
$commands["tell"]["topic"] = &$topic;

/*
The Class itself...
*/
class Topic
{
var $bot;


/*
Constructor:
Hands over a referance to the "Bot" class.
*/
function Topic (&$bot)
{
$this -> bot = &$bot;
$this -> topic = $this -> get_setting("topic");
$this -> topictime = $this -> get_setting("topictime");
$this -> topicsetter = $this -> get_setting("topic_setter");
}

function get_setting($set)
{
$res = $this -> bot -> db -> select("SELECT * FROM settings WHERE setting = '" . $set . "'");

if (!empty($res))
return $res[0][1];
else
return "";
}

function set_setting($set, $value)
{
$this -> bot -> db -> query("UPDATE settings SET value = '" . $value . "' WHERE setting = '" . $set . "'");
}

/*
This gets called on a tell with the command
*/
function tell($name, $msg)
{
if (preg_match("/^" . $this -> bot -> commpre . "topic/i", $msg))
$this -> bot -> send_tell($name, $this -> get_topic());
else if (preg_match("/^" . $this -> bot -> commpre . "edittopic$/i", $msg, $info))
$this -> set_topic($name, "");
else if (preg_match("/^" . $this -> bot -> commpre . "edittopic (.+)$/i", $msg, $info))
$this -> set_topic($name, $info[1]);
else
$this -> bot -> send_help($name);
}

/*
This gets called on msg in the privategroup with the command
*/
function pgmsg($name, $msg)
{
if (preg_match("/^" . $this -> bot -> commpre . "topic/i", $msg))
$this -> bot -> send_pgroup($this -> get_topic());
else if (preg_match("/^" . $this -> bot -> commpre . "edittopic$/i", $msg, $info))
$this -> set_topic($name, "");
else if (preg_match("/^" . $this -> bot -> commpre . "edittopic (.+)$/i", $msg, $info))
$this -> set_topic($name, $info[1]);
}

/* This function gets called when someone joins the group */
function pgjoin($name) {
$this -> bot -> send_tell($name, $this -> get_topic());
}

/* Makes the time string readable */
function make_time()
{
$diftime = time() - $this -> topictime;
$timestr = ' ';
$diftime = floor($diftime / 60);
$timestr .= $diftime % 60 . "min";
$diftime = floor($diftime / 60);
if ($diftime > 0)
$timestr = $diftime . "h" . $timestr;
return $timestr . " ago";
}

function get_topic()
{
$topicstr = "";

if ($this -> topic == '')
$topicstr .= "No topic!";
else
{
$topicstr .= $this -> topic . " [set by " . $this -> topicsetter . " ";
$topicstr .= $this -> make_time() . "]"; 
}

return $topicstr;
}

function set_topic($name, $topic)
{
$this -> topictime = time();
$this -> topic = $topic;
$this -> topicsetter = $name;

$this -> set_setting("topic", $topic);
$this -> set_setting("topictime", $this -> topictime);
$this -> set_setting("topic_setter", $name);

$this -> bot -> send_pgroup("New topic: " . $this -> get_topic());
}
}
?>
--- End code ---

Alreadythere:
Had an error in the script, corrected.

Navigation

[0] Message Index

[#] Next page

Go to full version