~singpolyma/biboumi

ref: 2d11a5f49454717c404b25825f18e696281207d9 biboumi/src/irc/irc_channel.cpp -rw-r--r-- 1.2 KiB
2d11a5f4 — louiz’ Support multiple nick session, except for IQs 6 years ago
                                                                                
bf7b05ef Florent Le Coz
2d11a5f4 louiz’
bf7b05ef Florent Le Coz
acf769d8 Florent Le Coz
720e31a5 Florent Le Coz
bf7b05ef Florent Le Coz
acf769d8 Florent Le Coz
bf7b05ef Florent Le Coz
7c671499 Florent Le Coz
e840704b Florent Le Coz
7c671499 Florent Le Coz
2d11a5f4 louiz’
7c671499 Florent Le Coz
020325db Florent Le Coz
5739d418 Florent Le Coz
020325db Florent Le Coz
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <irc/irc_channel.hpp>
#include <algorithm>

IrcChannel::IrcChannel():
  joined(false),
  self(nullptr)
{
}

void IrcChannel::set_self(const std::string& name)
{
  this->self = std::make_unique<IrcUser>(name);
}

IrcUser* IrcChannel::add_user(const std::string& name,
                              const std::map<char, char>& prefix_to_mode)
{
  this->users.emplace_back(std::make_unique<IrcUser>(name, prefix_to_mode));
  return this->users.back().get();
}

IrcUser* IrcChannel::get_self() const
{
  return this->self.get();
}

IrcUser* IrcChannel::find_user(const std::string& name) const
{
  IrcUser user(name);
  for (const auto& u: this->users)
    {
      if (u->nick == user.nick)
        return u.get();
    }
  return nullptr;
}

void IrcChannel::remove_user(const IrcUser* user)
{
  this->users.erase(std::remove_if(this->users.begin(), this->users.end(),
                    [user](const std::unique_ptr<IrcUser>& u)
                    {
                      return user->nick == u->nick;
                    }), this->users.end());
}

void IrcChannel::remove_all_users()
{
  this->users.clear();
  this->self.reset();
}

DummyIrcChannel::DummyIrcChannel():
  IrcChannel(),
  joining(false)
{
}