Beispiel #1
0
        public Room(RoomInfo roomInfo)
        {
            RoomInfo = roomInfo;
            IsActive = true;

            _settings = RoomSettings.Get(RoomInfo.ShortName);
            if (_settings == null)
            {
                _settings = new RoomSettings
                {
                    Room = RoomInfo.ShortName,
                    Bans = new HashSet<string>(),
                    Mods = new HashSet<string>()
                };
                _settings.Insert();
            }

            _history = new LinkedList<HistoryLine>();

            var cmd = new SqlCommand("SELECT * FROM rohbot.chathistory WHERE chat=lower(:chat) ORDER BY date DESC LIMIT 100;");
            cmd["chat"] = RoomInfo.ShortName;

            foreach (var line in cmd.Execute().Reverse().Select(r => HistoryLine.Read(r)))
            {
                _history.AddLast(line);
            }

            _showLinkTitles = (RoomInfo["LinkTitles"] ?? "").ToLower() == "true";
            IsWhitelisted = (RoomInfo["Whitelist"] ?? "").ToLower() == "true";
            IsHidden = (RoomInfo["Hidden"] ?? "").ToLower() == "true";
            IsPrivate = (RoomInfo["Private"] ?? "").ToLower() == "true";
            IsLogging = (RoomInfo["Logging"] ?? "true").ToLower() == "true";
            ShowWebStates = (RoomInfo["WebStates"] ?? "true").ToLower() == "true";
            DisableBanning = (RoomInfo["DisableBanning"] ?? "").ToLower() == "true";
        }
Beispiel #2
0
        public void Update()
        {
            lock (_rooms)
            {
                var deadRooms = _rooms.Where(kv => !kv.Value.IsActive);
                foreach (var dead in deadRooms)
                {
                    Room removedRoom;
                    _rooms.TryRemove(dead.Key, out removedRoom);
                }

                var settings = Program.Settings;

                try
                {
                    var oldRooms = _rooms.Where(r1 => settings.Rooms.All(r2 => r2["ShortName"] != r1.Value.RoomInfo.ShortName));
                    foreach (var room in oldRooms)
                    {
                        room.Value.Leave();
                    }
                }
                catch (Exception e)
                {
                    Program.Logger.Error("Failed to unload rooms", e);
                }

                try
                {
                    var newRooms = settings.Rooms.Where(r => !_rooms.ContainsKey(r["ShortName"]));
                    foreach (var room in newRooms)
                    {
                        var roomInfo = new RoomInfo(room);
                        var roomObj = (Room)Activator.CreateInstance(RoomTypes[roomInfo.Type], roomInfo);
                        _rooms.TryAdd(room["ShortName"], roomObj);
                    }
                }
                catch (Exception e)
                {
                    Program.Logger.Error("Failed to load rooms", e);
                }

                try
                {
                    foreach (var room in _rooms)
                    {
                        room.Value.Update();
                    }
                }
                catch (Exception e)
                {
                    Program.Logger.Error("Failed to update rooms", e);
                }
            }
        }