Страница 1 из 1

Технические вопросы, ничего про TCL.

СообщениеДобавлено: 28 июл 2010 08:23
Spoofing
На боте установлено 17 различных игр, это не в стиле бутылочки или бомбы, а как минимум игры уровня "словеса", "викторина", "мафия" и так далее. Проблема одна единственная - команды, для управления игрой и прочими плюшками. Как это лучше организовать? "!старт" "!стоп" везде вешать явно не то, как в играх было по-умолчанию. Хочется сделать чтобы идеально со стороны бота, и для пользователей удобно... И дело не только в запуске/остановке игры, а еще остальных командах - статистика, и далее уже зависит от игры, какой там еще функционал прилеплен...
Пока ничего лучше, кроме !%game_name% [start|stop|stats|top|hint|.......] придумать не смог. Может у вас есть какие идеи?

Re: Технические вопросы, ничего про TCL.

СообщениеДобавлено: 29 июл 2010 00:39
tvrsh
Еще можно добавлять к биндам характерные для каждой игры символы или буквы: для викторины !встарт !встоп !вхинт, для мафии !мстарт !мстоп !мхинт. Еще как вариант можно придумать разные триггеры а не только !. А вообще, тот, на котором ты остановился, наиболее подходящий, но его сложнее реализовать, так как придется не просто срабатывать на бинд, а проверять первое слово в бинде.

Re: Технические вопросы, ничего про TCL.

СообщениеДобавлено: 02 авг 2010 17:51
Spoofing
Других вариантов не вижу, похоже так и остается сделать. Значит будет _персональное_ обращение к каждой игре по команде-названию игры.

Для ведения статистики и прочих моментов (это нужно во многом) нужно сделать своеобразный "кэш" пользователей, чтобы у каждого пользователя был свой ID, использовать ник как ID не вариант т.к. его легко сменить, а с масками будет уже сложнее это сделать... Таким образом необходимо создать автономную, внутреннюю базу пользователей, помимо основного юзерфайла, за которым следит владелец бота и им управляют пользователи руками. Бот должен будет делать все сам, при обнаружении нового пользователя присваивать ему новый ID, иначе добавлять его новую маску к его ID в базе. Получится что-то вроде базы:
Код: Выделить всё
[handle]
id=1 // текущий ID, повышаем при каждом новом пользователе
1=Spoofing // 'хэндл' пользователя
[address]
1=*!*0x*@83.143.*.* *!*@eggdrop.sigma // маски пользователя через пробел
Так например, заходит пользователь с адресом Spoofing!Voglea@www.egghelp.ru, бот смотрит:
если в базе есть маска *!*Voglea@*.egghelp.ru, мы узнаем, что это пользователь Spoofing и его ID 1
иначе, если в базе есть хэндл по нику Spoofing, мы думаем, что это пользователь Spoofing и смотрим на текущую его маску *!*Voglea@*.egghelp.ru, которой если нет в базе - добавляем
иначе создаем нового пользователя с новым ID и добавляем с текущей маской.
И, так и ведем базу пользователей. При необходимости сохранять статистику постоянно на одного и того же пользователя - мы сохраняем ее на конкретный ID, который находим по этой базе.
Вопрос заключается - вообще, есть ли у кого какие-нибудь идеи на этот счет? Какой лучше формат базы делать, как вообще лучше связывать пользователя с его масками...
И главный момент, на которой нужно ответить впервую очередь: делать ли базу пользователей бота на каждую сеть отдельно, или же нет, и оставлять базу пользователей единой для всех сетей? Т.к. в RusNet это Spoofing!Voglea@eggdrop.sigma, а в WeNet это Spoofing!Voglea@nat.sigma24.ru - два совершенно разных пользователя, если смотреть преимущественно на хосты.

Re: Технические вопросы, ничего про TCL.

СообщениеДобавлено: 03 авг 2010 00:47
Spoofing
Многие в последнее время уже знают о скрипте urlinf.tcl (информация по ссылкам, более простые названия title_pub.tcl, etitle.tcl - можно найти на этом сайте), помимо заголовка HTML страницы еще есть вывод информации о бинарных файлах.. В данный момент уже реализовано:
текстовые файлы: <title>заголовок страницы</title>, детектирование UTF-8/16/32 файлов по заголовку
изображения: bmp, jpeg, gif, png
аудио: mp3, wav, ogg, wma
видео: flv, avi
Что еще посоветуете воткнуть в скрипт? Кстати говоря, на этом все, поэтому буду рад услышать даже предложения по функционалу, в планах сделать: ведение истории сказанных URL, сохранение файлов на локальном сервере (кэш)

Re: Технические вопросы, ничего про TCL.

СообщениеДобавлено: 03 авг 2010 23:11
tvrsh
Не очень понял зачем нужен ID. Каждому пользователю присваивается определенный хендл(по нику например, или по иденту) и маска, при заходе на канал смотреть есть ли совпадения масок, если есть то ассоциировать зашедшего с тем, чья маска совпала. Также сделать авторизацию пользователей, чтобы каждый мог ввести пароль и сам работать со списком масок, убирать или добавлять их.
Если база всех твоих игр глобальна для всех сетей то и юзерфайл тоже сделать один на всех. Ну а если нет, то и в каждой сети свой юзерфайл.
Формат базы я думаю лучше с Eggdrop копировать ибо про это уже много очень думали и не зря, выбран наиболее оптимальный вариант. Первоначальное добавление юзера я думаю лeчше делать с маской nick!ident@*
Я вообще считаю, что сложность вопроса зависит от того, на кого ориентирован скрипт. Если на нормальных пользователей, у которых всего пара тройка ников, постоянный идент, не изменяющийся при смене клиентов, то это не так сложно, но если человек постоянно меняет ники и у него нет постоянного идента, то там довольно часто будет такое, что бот либо не узнал его либо принял за кого-то другого.

Re: Технические вопросы, ничего про TCL.

СообщениеДобавлено: 19 ноя 2010 09:08
Spoofing
Второй месяц мучаюсь с написанием RSS читалки. Главная идея в том, чтобы сделать не конкретно под RSS стандарт, - а просто парсер < тэгов >, и чтобы бы там нибыло - вывести по запросу или бот сам проверял на обновления.

Формат вывода, - интересует как указывать тэги. feed какойнибудьсайт %rss/channel/title - есть ли другие идеи для указания какой тэг вывести? кроме как указания полного пути как лучше еще незнаю.

И незнаю как лучше организовать проверку на то, что какой-то кусок кода является блоком который нужно вывести или проверить на обновление. Кроме как ручного указания в команде, типа item/item как начальный и конечный элементы, что то, что между ними является "новостью" и ее следует проверить.. - других идей тоже нет.

Или попробуйте меня убедить, что одного RSS достаточно и ненужно делать универсальный чекер любых элементов любого сайта :)


Проблема решена :P