Версия для печати темы
MyDC.ru _ Готовые скрипты для PtokaX _ Чат Комнаты
Автор: Setuper 17.10.2008, 12:38
Название: Чат комнаты
Версия: 1.0
Версия API: 2
Код: открытый
Автор: Setuper
Описание: возможно создать несколько чат комнат. Чат комнаты могут быть "закрытыми", то есть для получения сообщений нужно войти, а могут быть открытыми, то есть сообщения отсылаются всем доступным профилям (как в ОпЧате, вы не входите постоянно в ОпЧат, если вы Оператор, то он вам доступен). При запуске скрипта создаётся файл ChatRoom.dbs, в котором по умолчанию создаются 3 комнаты: комната для операторов, комната для випов и общая закрытая комната. В файле ChatRoom.dbs множество настроек. Опишу их на общей комнате:
Код
["-MembersRoom-"] = { -- название комнаты
["sMsgExit"] = "*** Вы покинули комнату.", -- сообщение, отправляемое пользователю после выхода из комнаты
["tAllow"] = { -- профили, которым доступна комната
[0] = 1,
[2] = 1,
[3] = 1,
[1] = 1,
[-1] = 0,
},
["sDescription"] = "[БОТ] Чат комната для пользователей", -- описание бота
["sAway"] = false, -- режим бота: true - away, false - не away
["sEmail"] = "setuper@gmail.com", -- email бота
["sClientName"] = "DCBOT", -- название клиента бота
["bKey"] = true, -- имеет ли ключик бот: true - имеет, false - не имеет
["sTagOption"] = "M:A,H:0/0/1,S:0", -- тэг бота (не трогать, если не знаешь что это)
["sMsgEnter"] = "*** Добро пожаловать в чат комнату!", -- сообщение пользователю при входе в чат комнату
["bMembers"] = true, -- надо ли входить(выходить) в чат комнату: true - надо, false - не надо
["iShareSize"] = 0, -- шара бота чат комнаты
["tMembers"] = { -- таблица членов чат комнаты (не изменять)
},
["tVisible"] = { -- профили, которым видна чат комната в списке пользователей
[0] = 1,
[2] = 1,
[3] = 1,
[1] = 1,
[-1] = 1,
},
["bReturn"] = true, -- возвращаемое значение чат комнатой
},
добавлю, что если скрипт чат комнаты в списке скриптов стоит до скрипта антирекламы и параметр bReturn=true, то сообщения чат комнаты не будут отслеживаться антирекламой, в противном случае будут.
После первого запуска скрипта в файле настроек по умолчанию создаётся 3 комнаты. Вы можете менять количество комнат по смоему усмотрению.
Конечно возможности программирования на lua не ограничены. Данный код я вырвал из SBot'a и немного преобразовал, но большая часть возможностей чат комнат осталась в SBot'е (чат комната непосредственно в чате, а не в личке, чёрные и белые списки для любого пользователя, установка паролей на чат комнаты, антифлуд, антимат, антикапс, антиреклама в чат комнатах и тд. и тп.). Нету времени.
Для самостоятельного перевода скрипта под версию API 1 следует воспользоваться инструкцией: http://mydc.ru/topic605.html
Юзаем!
Автор: M.a.r.s.e.l 10.11.2008, 14:23
Выложите под API 1 если opl_api.lu скажите то я еще не научился пользоваться и тупит скрипт )
Автор: Setuper 10.11.2008, 20:24
Не понимаю, что не понятного? Всё очень подробно разобрано. Объясняю всё конкретно для этого скрипта:
1). Копируем в папку scripts файл old_api.lu
2). Открываем скрипт chatrooms.lua и в самом начале скрипта (можно перед комментарием, можно после) дописываем строчку:
Код
dofile(frmHub:GetPtokaXLocation().."scripts/old_api.lu")
3). Вместо OnStartup() пишем Core.OnStartup()
Вместо UserConnected(tUser) пишем Core.UserConnected(tUser)
Вместо RegConnected=UserConnected пишем Core.RegConnected=Core.UserConnected
Вместо OpConnected=UserConnected пишем Core.OpConnected=Core.UserConnected
Вместо ChatArrival(tUser,sData) пишем Core.ChatArrival(tUser,sData)
Вместо ToArrival(tUser,sData) пишем Core.ToArrival(tUser,sData)
Всё! Скрипт переведён! Не понимаю чего тут трудного?
Всё по инструкции
Автор: M.a.r.s.e.l 10.11.2008, 21:14
о_О наконецто написал спасибо!
Автор: Jaska 26.1.2009, 15:50
Илья сделай еще модераторов к чатрум. Я когда-то делал-делал так и не доделал) вроде даже тут валялось.
Автор: Setuper 4.2.2009, 22:03
v 2.0
Fixed: Исправлена ошибка. При выходе из комнаты сообщения продолжали приходить.
Автор: mariner 4.2.2009, 23:55
так, еще - если 2жды войти в комнату - то она пропускает команду в чат. Лучше стобы оно комнату открывало!
PS а еще можно пароль на вход в комнату (типо чтоб можно было создат приваткомнату ;) )
Автор: D'aspid 5.2.2009, 0:01
Да пароль обязательно нужно
Автор: Setuper 5.2.2009, 0:02
конечно пропустит, но не в чат, а в комнату, потому как это будет считаться за сообщение уже)))
Насчет паролей, то можно многое что сделать)))
Честно говоря не оптимизированные фичи делать не очень хочется, а без бд оптимизации можно не ждать(
Автор: mariner 5.2.2009, 0:17
ну хоть закров пропуск в чат повторного входа (PS у нас же линукс, делай с бд!)
Автор: dimetrius 5.2.2009, 1:32
Не хватает функции посмотреть кто подключен к комнате
Автор: BeSeR 7.3.2009, 15:47
Название: Чат комнаты
Версия: 1.0
Версия API: 2
Код: открытый
Автор: Setuper
Переведен : BeSeR Из API 2 под API 1
Файл :
чатрумы.lua ( 10.42 килобайт )
: 53
Автор: Setuper 7.3.2009, 15:52
Это лишнее. Перевести каждый может без проблем.
Автор: Tarantul13 18.4.2009, 9:49
[10:34] Синтаксис chatrooms.v4c.lua:35: bad argument #1 to 'pairs' (table expected, got nil)
Автор: Setuper 18.4.2009, 11:37
В 35 строке нет функции pairs. Либо ты что-то менял, либо у тебя не этот скрипт!
Автор: 0oZoNeK 27.7.2009, 20:53
А как сделать что бы нажимаешь в меню чат комната и войти и всё а не писать название название писать или просто в чат +войти и входит (Мне нужна только одна комната )??????
Автор: Setuper 4.8.2009, 16:54
Для этого надо использовать меню юзера, а не хаба))
Автор: Uncle_Dif 13.9.2009, 17:16
Я озадачен, скачал и установил этот скрипт и теперь у меня два оп-чата :пацталом:.
Пытался стереть оп-чат в птоке (0411), не удаётся. Зачем не два оп-чата... Что посоветуете?
Автор: X-Sky 20.9.2009, 23:23
Цитата(Uncle_Dif @ 13.9.2009, 22:16)
Я озадачен, скачал и установил этот скрипт и теперь у меня два оп-чата :пацталом:.
Пытался стереть оп-чат в птоке (0411), не удаётся. Зачем не два оп-чата... Что посоветуете?
Лови, убрал ОПчат.
chatrooms.lua ( 9.32 килобайт )
: 24
Автор: X-Sky 22.9.2009, 20:12
Неплохо бы было, если б можно было выкидывать юзеров из комнаты, либо запрещать к примеру определённому юзеру вход в комнату.
Автор: 0oZoNeK 4.10.2009, 11:33
Помогите пожалуйста я себе сделал 1 комнату для юзеров !!! в меню я убрал всё лишнее , вопрос как сделать что бы когда выбераешь Игровая > Войти и входит и не нужно писпть название %[line: Введите имя комнаты] как это убрать ???
Автор: Setuper 4.10.2009, 11:48
Для этого нужно вызывать меню юзера, а не меню хаба.
Автор: 0oZoNeK 4.10.2009, 16:30
Эм....а как это ???
Автор: Setuper 4.10.2009, 22:00
Правый клик по комнате, а не по вкладке хаба.
Автор: X-Sky 4.10.2009, 23:23
0oZoNeK, как я понял у тебя всего одна комната.
Если так - ложи скрипт, переделаю тебе его поудобнее.
Автор: 0oZoNeK 5.10.2009, 14:29
Я в этом скрипте кое что удалил ))) если что качни оригинал и переделай (Зарание благодарю + гарантирую)
P.S Из этой комнаты я хочу сделать Игровую !!!
Автор: 0oZoNeK 13.10.2009, 15:58
Спасибо всё работает на отлично
PS. Кнопка "Cпасибо" была учтена !!! )))
Автор: crake 22.10.2009, 22:31
Сделайте пожалуйста только одну чат-комнату для випов и без меню, чтобы вип по умолчанию в неё мог войти ( чтобы входить и выходить можно было командами). У меня чет ниче не получается(((
Автор: X-Sky 23.10.2009, 8:52
Лови, имя комнаты [VIP]Комната, видна в списке и доступна только VIР'ам
Не забывай про кнопку спасибо
ChatRooms.rar ( 3.02 килобайт )
: 25
Автор: Wariner 23.10.2009, 10:49
я не понимаю неужели нельзя покопаться и правильно настроить скрипт из первого поста ?! зачем просить выкладывать его по новой, но с другой настройкой?!
PS: впредь такие сообщения будут удаляться без предупреждения!
Автор: Unterlink(X-Sky) 3.2.2010, 20:07
Не ругайся, Илюх, все мы были такими)
кстати
Цитата
большая часть возможностей чат комнат осталась в SBot'е (чат комната непосредственно в чате, а не в личке, чёрные и белые списки для любого пользователя, установка паролей на чат комнаты, антифлуд, антимат, антикапс, антиреклама в чат комнатах и тд. и тп.). Нету времени.
не думаешь доделывать?))
Автор: foXDEvil 16.3.2010, 11:54
Хочу сделать так чтобы в комнату каждое время писалось одно и тоже сообщение, но не выходит(((
На пример:
Код
function OnStartup()
tmr = TmrMan.AddTimer(600000)
end
function OnTimer(tmr)
Core.SendToAll("#Games","Сообщение")
end
Автор: Nickolya 16.3.2010, 13:47
Код
TmrMan.AddTimer(600000, "SendOnTimer")
добавить после
Код
function OnStartup()
и добавить функцию в самый конец скрипта:
Код
function SendOnTimer()
tSys:SendToMembers("#Games","#Games","Сообщение","#Games")
end
Хотя я на 100% не уверен...
Автор: foXDEvil 16.3.2010, 14:48
Код
function OnStartup()
tmr = TmrMan.AddTimer(600000)
end
function OnTimer(tmr)
tSys:SendToMembers("#Games","#Games","Сообщение","#Games")
end
Спасибо
вот этот вариант работает =)
Ещё кое что =) выложите плиз сюда ту часть в которой задаётся функция команды Members и где происходит чтение списка пользователей в комнате из файла ChatRoom.dbs. Сам пробовал сделать но результат 0
Я хочу сделать так чтобы другой скрипт читал файл ChatRoom.dbs, который так и будет изменятся скриптом chatrooms, и отсылал сообщение пользователям в комнате
Автор: VOVKT 11.9.2010, 6:20
Цитата(X-Sky @ 7.10.2009, 10:19)
Получите, распишитесь
Все 2 файла кидаем в папку "Scripts"
ChatRooms.rar ( 3.1 килобайт )
: 50P.S. На всякий случай, есть такая кнопочка "Спасибо"
помогите в этой версии сделать чтоб по команде выводило кол-во и ники юзеров в комнате
ну или скажите как пощитать кол-во строк в таблице ["tMembers"] и вывести их
моего незнания хватило лиш на это:
Код
elseif self:String2Lower(sCmd)==self:String2Lower(self.sCmdUsers) then
sRoom=self:CheckRoom(sA,sNick,sRoom)
if not sRoom then
return true
end
if tRooms[sRoom]["tMembers"][sNick] then
tSys:SendToUser(sNick,"Кол-во юзеров......",sRoom,sRoom)
return true
end
Автор: Nickolya 12.9.2010, 20:07
Попробуй вот так:
Код
elseif self:String2Lower(sCmd)==self:String2Lower(self.sCmdUsers) then
sRoom=self:CheckRoom(sA,sNick,sRoom)
if not sRoom then
return true
end
if tRooms[sRoom]["tMembers"][sNick] then
local i, sMembers = 0, {}
for sNick in pairs(tRooms[sRoom]["tMembers"]) do
i = i + 1
table.insert(sMembers, sNick)
end
sMembers = table.concat(sMembers, ', ')
tSys:SendToUser(sNick,"В комнате "..i.." пользователей: "..sMembers,sRoom,sRoom)
return true
end
Автор: VOVKT 14.9.2010, 12:20
спасиб работает, а вот еще вопрос когда юзер уже добавлен в комнату то если он снова нажмет войти в комнату то команда отображается в гл чате и когда вызываю команду сколько юзеров она отсылается(сама команда) всем кто в комнате, как можно откл их отправку всем?
Автор: Nickolya 14.9.2010, 12:34
Код
-- return true -- было вот здесь
end
return true -- стало здесь, и так надо сделать по всей функции tSys:DoCmd(sNick,sArg,sRoom)
elseif self:String2Lower(sCmd)==self:String2Lower(self.sCmdExit) then
Автор: VOVKT 14.9.2010, 13:15
примного благодарен все работает, а как сделать поле ["sMsgEnter"] много строчным?
Автор: Setuper 14.9.2010, 13:41
Код
["sMsgEnter"] = [[много
много
очень много
строк]],
Автор: VOVKT 14.9.2010, 14:53
спасиб)
скажите что не правильно я делаю в функции которая при дисконекте юзера убирает его из списка пользователей в комнате
Код
function UserDisconnected(sNick)
local zRoom="[R]Games"
if not zRoom then
return true
end
if tRooms[zRoom]["tMembers"][sNick] then
tRooms[zRoom]["tMembers"][sNick]=nil
tSys:Save(tRooms,"zRooms",tSys.sScriptsPath..tSys.hFile)
if self.bShowEnterExit then self:SendToMembers(sNick,zRoom,"*** Вышел: "..sNick,zRoom) end
end
return true
end
и еще помогите исправить такую вещь:
когда отправляеш сообщение то тебе отображается нормально но собиседнику приходит с доп пробелом с переди,
если в tSys:SendToUser удалить пробел
Код
if type(User)=="table" then
Core.SendToUser(User,"$To: sNick From: "..Sender.." $<"..Nick.."> "..sMsg)
else
Core.SendToNick(User,"$To: sNick From: "..Sender.." $<"..Nick..">"..sMsg) -- вот тут после >
end
то сообщения от бота приходят с потеряным первым символом(
Автор: Nickolya 15.9.2010, 9:15
Код
function UserDisconnected(tUser)
for sRoom, t in pairs(tRooms) do
local sNick = tUser.sNick
if tRooms[sRoom]["tMembers"][sNick] then
tRooms[sRoom]["tMembers"][sNick]=nil
tSys:Save(tRooms,"tRooms",tSys.sScriptsPath..tSys.hFile)
tSys:SendToUser(sNick,tRooms[sRoom].sMsgExit,sRoom,sRoom)
if tSys.bShowEnterExit then tSys:SendToMembers(sNick,sRoom,"*** Вышел: "..sNick,sRoom) end
end
end
end
Чтобы не было лишнего пробела замени
Код
local _,_,sArg1,sArg2,sArg3=string.find(sData,"%$To:%s+(%S+)%s+From:%s+(%S+)%s+%$%b<>(.*)")
на
Код
local _,_,sArg1,sArg2,sArg3=string.find(sData,"%$To:%s+(%S+)%s+From:%s+(%S+)%s+%$%b<>%s(.*)")
Автор: VOVKT 16.9.2010, 14:13
спасиб, щас заметил что юзеры видят команды которые отправили(
вот еще два вопроса:
1) юзер посылает сообщение в чат комнату, я сделал что всем кто в комнате это фраза приходит от другова ника
в функции tSys:SendToUser добавил:
Код
if tRooms[Sender]["nMembers"][Nick] then Nick=tRooms[Sender]["nMembers"][Nick] end
и все какбы работает, но отправителю сообщение возвращается с егоже ником собственно вопрос как отправителю прислать с изм ником?
2) сложно написать как надо поэтому приведу пример:
пользователь посылает комнду в чат комнату +command text
как поймать этот текст в условии или как переписать условие чтоб ловил?
Код
elseif self:String2Lower(sCmd)==self:String2Lower(self.sCmdName) then
sRoom=self:CheckRoom(sA,sNick,sRoom)
if tRooms[sRoom]["tMembers"][sNick] then
Автор: Nickolya 21.9.2010, 17:29
VOVKT, то, что юзер отправляет кому-то в приват, он всегда видит в неизменном виде, в отличие от общего чата, так что отправлять ему его же текст не имеет смысла. И все команды и прочее, что идет в привате всегда будут видны "как есть". Что касается захвата, то в функции tSys:DoCmd идущие за командой даты ловятся как
Код
sA