instaserv.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /* QuoteServ core functions
  2. */
  3. #include "module.h"
  4. #include "instaserv.h"
  5. class InstaServService: public InstaServCore
  6. {
  7. Reference<BotInfo> InstaServ;
  8. std::vector<Anope::string> defaults;
  9. std::map<User *, InstaMessageBuffer *> buffers;
  10. public:
  11. InstaServService(const Anope::string &modname, const Anope::string &creator);
  12. ~InstaServService();
  13. void OnReload(Configuration::Conf *conf) anope_override;
  14. void OnShutdown() anope_override;
  15. void OnRestart() anope_override;
  16. virtual void OnExpire(User *u);
  17. EventReturn OnBotPrivmsg(User *u, BotInfo *bi, Anope::string &msg) anope_override;
  18. BotInfo* GetBotInfo();
  19. virtual InstaMessageBuffer *GetBuffer(User *u);
  20. virtual bool HasBuffer(User *u);
  21. virtual void SetBuffer(User *u, InstaMessageBuffer *buffer);
  22. };
  23. InstaServService::InstaServService(const Anope::string &modname, const Anope::string &creator) : InstaServCore(modname, creator)
  24. {
  25. }
  26. InstaServService::~InstaServService()
  27. {
  28. OnShutdown();
  29. }
  30. BotInfo *InstaServService::GetBotInfo()
  31. { return *InstaServ; }
  32. void InstaServService::OnReload(Configuration::Conf *conf)
  33. {
  34. const Anope::string &channick = conf->GetModule(this)->Get<const Anope::string>("client");
  35. if (channick.empty())
  36. throw ConfigException(Module::name + ": <client> must be defined");
  37. BotInfo *bi = BotInfo::Find(channick, true);
  38. if (!bi)
  39. throw ConfigException(Module::name + ": no bot named " + channick);
  40. InstaServ = bi;
  41. }
  42. void InstaServService::OnShutdown()
  43. {
  44. }
  45. void InstaServService::OnRestart()
  46. {
  47. OnShutdown();
  48. }
  49. InstaMessageBuffer *InstaServService::GetBuffer(User *u)
  50. {
  51. std::map<User*, InstaMessageBuffer *>::iterator it = buffers.find(u);
  52. if (it == buffers.end())
  53. return NULL;
  54. return it->second;
  55. }
  56. bool InstaServService::HasBuffer(User *u)
  57. {
  58. std::map<User*, InstaMessageBuffer *>::iterator it = buffers.find(u);
  59. return it != buffers.end();
  60. }
  61. void InstaServService::SetBuffer(User *u, InstaMessageBuffer *buffer)
  62. {
  63. buffers[u] = buffer;
  64. }
  65. EventReturn InstaServService::OnBotPrivmsg(User *u, BotInfo *bi, Anope::string &msg)
  66. {
  67. if (bi == InstaServ)
  68. {
  69. InstaMessageBuffer *buffer = GetBuffer(u);
  70. if (buffer)
  71. {
  72. if (msg == "EOF")
  73. buffer->OnEndBuffer();
  74. else
  75. buffer->Add(msg);
  76. return EVENT_STOP;
  77. }
  78. }
  79. return EVENT_CONTINUE;
  80. }
  81. void InstaServService::OnExpire(User *u)
  82. {
  83. std::map<User*, InstaMessageBuffer *>::iterator it = buffers.find(u);
  84. if (it != buffers.end())
  85. buffers.erase(it);
  86. }
  87. MODULE_INIT(InstaServService)