Doob 2 749 Опубликовано: 16 мая, 2017 (изменено) Иногда надо связать несколько компьютеров на большом расстоянии или между мирами, или даже между серверами. Так как у нас есть интернет-карта, можно провернуть несложный хак - пустить информацию через внешний сервер. Но чтобы не писать серверную часть, можно использовать готовый протокол с готовыми серверами. Получается крутая связанная карта для многих компов. Данная программа реализует IRC мост, по которому могут общаться не только опенкомпы, но и любые устройства с интернетом. Например, можно с мобильника дать команду своим компьютерам на нескольких игровых серверах. Использование: Скачать программу pastebin get CmLFFF7g /bin/imodem.lua Проверить наличие интернет-карты в компьютере Запустить программу imodem В течении некоторого времени будет устанавливаться связь, а затем можно работать с модемом. Чтобы послать сообщение всем устройствам на канале, есть функция imodem.broadcast( сообщение: строка ) Чтобы послать сообщение по определенному адресу - imodem.send( получатель: строка, сообщение: строка ) Для разрыва связи и прекращения работы - imodem.stop() А чтобы принимать сообщения, достаточно ловить событие modem_message, как у обычных модемов. Адрес сервера и канал можно изменить в коде программы, желательно иметь сервер без обрезания ников и защиты от флуда. Изменено 16 мая, 2017 пользователем Doob 8 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HixOff 102 Опубликовано: 16 мая, 2017 ух как здорово, а я уже почти начал мостом ридава обмазываться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 16 мая, 2017 Фигня в том, как уже заметили в Ирке, что большинство публичных IRC-серверов тупо забанят или кикнут клиента за массовый флуд. А такой бот несомненно будет флудить. Поэтому есть вероятность, что потребуется поднять свой IRC сервер. А тут уже вопрос, что удобнее - возиться со своим сервером, или воспользоваться мостом Рида. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob Автор темы 2 749 Опубликовано: 16 мая, 2017 (изменено) Не особо оно и проблемно, если сообщения собирать, упаковывать и отправлять раз в N секунд, то можно обойти защиту. А запустить сервер или найти подходящий, тоже не сложно. Ну и смотря какие данные передаются, если какие-то управляющие команды, то не страшно. А передавать нажатия клавиш или работать с файловой системой это уже критично по времени, тут нужны специализированные подходы. Изменено 16 мая, 2017 пользователем Doob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Laine_prikol 48 Опубликовано: 28 мая, 2017 (изменено) Иногда надо связать несколько компьютеров на большом расстоянии или между мирами, или даже между серверами. Так как у нас есть интернет-карта, можно провернуть несложный хак - пустить информацию через внешний сервер. Но чтобы не писать серверную часть, можно использовать готовый протокол с готовыми серверами. Получается крутая связанная карта для многих компов. Данная программа реализует IRC мост, по которому могут общаться не только опенкомпы, но и любые устройства с интернетом. Например, можно с мобильника дать команду своим компьютерам на нескольких игровых серверах. Использование: Скачать программу pastebin get CmLFFF7g /bin/imodem.lua Проверить наличие интернет-карты в компьютере Запустить программу imodem В течении некоторого времени будет устанавливаться связь, а затем можно работать с модемом. Чтобы послать сообщение всем устройствам на канале, есть функция imodem.broadcast( сообщение: строка ) Чтобы послать сообщение по определенному адресу - imodem.send( получатель: строка, сообщение: строка ) Для разрыва связи и прекращения работы - imodem.stop() А чтобы принимать сообщения, достаточно ловить событие modem_message, как у обычных модемов. Адрес сервера и канал можно изменить в коде программы, желательно иметь сервер без обрезания ников и защиты от флуда. А зачем IRC? Нельзя же просто обычным http воспользоваться? Например на хостинг залить какой-нибудь txt в котором будут команды, а через какой нибудь фронт на php сделать редактирование этого txt, и чтобы при каждой скачки файла с сервера, OpenComputers сравнивал что написано в этом файле Изменено 28 мая, 2017 пользователем Laine_prikol 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Гость Kartze Опубликовано: 7 июня, 2017 @@Laine_prikol, чтобы не писать серверную часть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Laine_prikol 48 Опубликовано: 10 июля, 2017 (изменено) @@Laine_prikol, Фигня в том, как уже заметили в Ирке, что большинство публичных IRC-серверов тупо забанят или кикнут клиента за массовый флуд. А такой бот несомненно будет флудить. Поэтому есть вероятность, что потребуется поднять свой IRC сервер. А тут уже вопрос, что удобнее - возиться со своим сервером, или воспользоваться мостом Рида. Изменено 10 июля, 2017 пользователем Laine_prikol Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Гость Kartze Опубликовано: 10 июля, 2017 @@Laine_prikol, чтобы поднять IRC-сервер, необязательно совокупляться с пехапе и прочими слонами, можно просто скачать-(скомпилить)-запустить у себя на компьютере/расппай/роутере/кошке/кресте/кирпиче... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SDV 784 Опубликовано: 10 июля, 2017 запустить у себя на компьютере/расппай/роутере/кошке/кресте/кирпиче Пфф, у меня на тетрисе сервер поднят Только осторожно, ОЗУ может не хватить на всех пользователей Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Гость Kartze Опубликовано: 10 июля, 2017 у меня на тетрисе ой вася, мог бы и не объяснять с: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asior 586 Опубликовано: 19 февраля, 2019 (изменено) Недавно начал писать бота с использованием этой замечательной библиотеки, но к несчастью столкнулся с некоторыми недоработками. Поэтому решено было доработать библиотеку imodem и вот что из этого получилось: Обновление для библиотеки imodem Теперь imodem может обрабатывать личные сообщения (раньше просто игнорил их). Говорим спасибо @Bit Добавлена авторизация ника Все данные по именам/каналам лежат в файле конфигурации по адресу /etc/imodem.cfg Возможен запуск по данным пользователя из Shell Добавлено логирование Добавлено переподключение если отключится интернет Итак, поясняю. Немного изменился порядок приема сообщения. Теперь входные данные выглядят так: modem_message ник_imodem ник_говорящего 0 #канал/ник_imodem сообщение Если сообщение идет с канала, то указывается канал, если личное сообщение, то ник imodem. Чтобы не лазить по библиотеке, ради изменения ника, канала, сервера было решено перенести все эти данные в файл конфигурации. Библиотека автоматически проверяет файл конфигурации, и в случае если его не найдет, самостоятельно его восстановит. Данные хранятся в следующем виде: nick = "Тут ник" pass = "Пароль (0)" server = "irc.esper.net:6667" channel = "#канал" log = "Записывать логи (1/0)" Чтобы не заморачиваться с настройкой ника/канала/сервера/логов можно передать все эти данные одной командой: imodem [server[:port]] <nickname> <password> <channel> <save(1/0)> <log(1/0)> Ну а если все настроено и вас устраивает, можете напрямую imodem запускать и по сохраненным данным все запустится. Логирование сделано больше для отладки, логи можно найти по адресу /IMODEMLOG.txt Для того чтобы imodem мог переподключаться, через каждые 60 секунд оправляется пингование на сервер. И если в течении 30 секунд не придет ответ, imodem автоматически переподключится. Это лучше чем словить кратковременный сбой в доступе к интернету и потом вручную перезагружать библиотеку. Скачать библиотеку можно по команде pastebin get -f MvR7FTGS /lib/imodem.lua Выражаю благодарность за помощь в улучшении @Bit, @Doob, @vladimir, @Fingercomp Изменено 25 февраля, 2019 пользователем Asior Обновление библиотеки 5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob Автор темы 2 749 Опубликовано: 20 февраля, 2019 Странно, у меня личные сообщения нормально обрабатываются. Флаг для логирования можно тоже сунуть в конфиг. Конфиг следует сделать в виде lua-таблицы - быстрей и меньше кода. Изначально все задумывалось как программный модем между компами. Логин для NickServ и прочие изощрения поверх стандарта, пользователь должен был организовывать в своей программе. imodem это всего-лишь интерфейс, совместимый с OpenOS. Хотя, да не сделал пинг в сторону сервера, каюсь. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Bit 9 Опубликовано: 20 февраля, 2019 (изменено) Я просто добавил возможность узнать с какого канала говорят(если это ник бота то с лс) вот и все... Все что я добавил, это: local match2 = line:match('PRIVMSG[^PRIVMSG]%S*[^ :]') if match2 then responser,_ = match2:gsub("%PRIVMSG ", "") end и еще добавил responser в computer.pushSignal computer.pushSignal('modem_message', imodem.nick, prefix, 0, responser, message) Вот и весь мой вклад) Изменено 20 февраля, 2019 пользователем Bit Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asior 586 Опубликовано: 25 февраля, 2019 20.02.2019 в 04:47, Doob сказал: Странно, у меня личные сообщения нормально обрабатываются. Попробуй отловить откуда какое сообщение пришло и кому придется библиотеке отвечать. Она никак не разделяет личное сообщение или из канала. 20.02.2019 в 04:47, Doob сказал: Флаг для логирования можно тоже сунуть в конфиг. Конфиг следует сделать в виде lua-таблицы - быстрей и меньше кода. Флаг сунул, в конфиги тоже внес опцию по логированию. Конфиги переделал, спасибо @Fingercomp и его ответам Ссылка для установки все та же. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob Автор темы 2 749 Опубликовано: 3 августа, 2019 Обновление! Теперь интернет-модем это действительно библиотека. Добавлено автоподключение при разрыве связи, проверка состояния, ручное подключение к серверу. Переменные: imodem.server :строка - адрес IRC сервера, к которому надо подключится. imodem.port :число - порт сервера. imodem.channel :стpока - канал, в который надо зайти при подключении. Если задать nil, тогда общаться можно только через imodem.send(). Если задать канал после подключения, то можно сделать переподключение - imodem.connect(), либо послать сообщение на уровне IRC протокола - imodem.send_raw('JOIN #канал'). imodem.nick - ник бота, генерируется на основе адреса интернет-карты. Методы: imodem.isOnline() - возвращает, есть ли подключение к серверу. imodem.connect() - подключается к серверу. imodem.disconnect() - разрывает связь с сервером. imodem.send_raw(сообщение: стpока) - отправить сообщение на уровне протокола. imodem.broadcast(сообщение: стpока) - отправить сообщение в текущий канал. imodem.send(цель: строка, сообщение: стpока) - отправить приватное сообщение пользователю или в канал. Установка в OpenOS: wget https://raw.githubusercontent.com/DOOBW/internet_modem/master/imodem.lua /lib/imodem.lua Пример использования: local imodem = require('imodem') local event = require('event') imodem.connect() while not imodem.isOnline() do os.sleep() end imodem.broadcast('Hello IRC!') while true do local e = {event.pull('modem_message')} print(e[3]..': '..e[6]) end 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya 415 Опубликовано: 4 августа, 2019 @Doob Так ведь подменяя пулсигналлу, ты же подменяешь её глобально. Нехорошо же это, разве нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob Автор темы 2 749 Опубликовано: 4 августа, 2019 Не сказал бы. Очевидные плюсы - независимость от сторонних библиотек, получение информации из первых рук, экономия памяти. Инъекция в процесс - хороший способ не мешать пользователю заниматься своими делами. Ограничения по типу main_loop как по мне - .очень сомнительная техника. Можно было бы оформить в виде демона, который будет использовать свою логику и буфер для конвертации сигналов, но так мне показалось проще. Для EEPROM можно сделать однострочник не меняя код, либо загрузить как библиотеку. Но в отдельном окружении все-таки безопасней. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах