Перейти к содержимому
Doob

Интернет-модем для OpenOS (через IRC)

Рекомендуемые сообщения

Иногда надо связать несколько компьютеров на большом расстоянии или между мирами, или даже между серверами. Так как у нас есть интернет-карта, можно провернуть несложный хак - пустить информацию через внешний сервер. Но чтобы не писать серверную часть, можно использовать готовый протокол с готовыми серверами. Получается крутая связанная карта для многих компов.

 

Данная программа реализует IRC мост, по которому могут общаться не только опенкомпы, но и любые устройства с интернетом.

Например, можно с мобильника дать команду своим компьютерам на нескольких игровых серверах.

 

Использование:

Скачать программу pastebin get CmLFFF7g /bin/imodem.lua

Проверить наличие интернет-карты в компьютере

Запустить программу imodem

В течении некоторого времени будет устанавливаться связь, а затем можно работать с модемом.

Чтобы послать сообщение всем устройствам на канале, есть функция imodem.broadcast( сообщение: строка )

Чтобы послать сообщение по определенному адресу - imodem.send( получатель: строка, сообщение: строка )

Для разрыва связи и прекращения работы - imodem.stop()

 

А чтобы принимать сообщения, достаточно ловить событие modem_message, как у обычных модемов.

 

Адрес сервера и канал можно изменить в коде программы, желательно иметь сервер без обрезания ников и защиты от флуда.

Изменено пользователем Doob

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ух как здорово, а я уже почти начал мостом ридава обмазываться

post-30120-1465222832.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Фигня в том, как уже заметили в Ирке, что большинство публичных IRC-серверов тупо забанят или кикнут клиента за массовый флуд.

А такой бот несомненно будет флудить.

 

Поэтому есть вероятность, что потребуется поднять свой IRC сервер. А тут уже вопрос, что удобнее - возиться со своим сервером, или воспользоваться мостом Рида.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не особо оно и проблемно, если сообщения собирать, упаковывать и отправлять раз в N секунд, то можно обойти защиту.

А запустить сервер или найти подходящий, тоже не сложно.

Ну и смотря какие данные передаются, если какие-то управляющие команды, то не страшно. А передавать нажатия клавиш или работать с файловой системой это уже критично по времени, тут нужны специализированные подходы.

Изменено пользователем Doob

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Иногда надо связать несколько компьютеров на большом расстоянии или между мирами, или даже между серверами. Так как у нас есть интернет-карта, можно провернуть несложный хак - пустить информацию через внешний сервер. Но чтобы не писать серверную часть, можно использовать готовый протокол с готовыми серверами. Получается крутая связанная карта для многих компов.

 

Данная программа реализует IRC мост, по которому могут общаться не только опенкомпы, но и любые устройства с интернетом.

Например, можно с мобильника дать команду своим компьютерам на нескольких игровых серверах.

 

Использование:

Скачать программу pastebin get CmLFFF7g /bin/imodem.lua

Проверить наличие интернет-карты в компьютере

Запустить программу imodem

В течении некоторого времени будет устанавливаться связь, а затем можно работать с модемом.

Чтобы послать сообщение всем устройствам на канале, есть функция imodem.broadcast( сообщение: строка )

Чтобы послать сообщение по определенному адресу - imodem.send( получатель: строка, сообщение: строка )

Для разрыва связи и прекращения работы - imodem.stop()

 

А чтобы принимать сообщения, достаточно ловить событие modem_message, как у обычных модемов.

 

Адрес сервера и канал можно изменить в коде программы, желательно иметь сервер без обрезания ников и защиты от флуда.

А зачем IRC? Нельзя же просто обычным http воспользоваться? Например на хостинг залить какой-нибудь txt в котором будут команды, а через какой нибудь фронт на php сделать редактирование этого txt, и чтобы при каждой скачки файла с сервера, OpenComputers сравнивал что написано в этом файле

Изменено пользователем Laine_prikol

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

@@Laine_prikol,

 

 

 

 

 

Фигня в том, как уже заметили в Ирке, что большинство публичных IRC-серверов тупо забанят или кикнут клиента за массовый флуд.

А такой бот несомненно будет флудить.

 

Поэтому есть вероятность, что потребуется поднять свой IRC сервер. А тут уже вопрос, что удобнее - возиться со своим сервером, или воспользоваться мостом Рида.

Изменено пользователем Laine_prikol

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Kartze

@@Laine_prikol, чтобы поднять IRC-сервер, необязательно совокупляться с пехапе и прочими слонами, можно просто скачать-(скомпилить)-запустить у себя на компьютере/расппай/роутере/кошке/кресте/кирпиче...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

запустить у себя на компьютере/расппай/роутере/кошке/кресте/кирпиче

Пфф, у меня на тетрисе сервер поднят  :D  

Только осторожно, ОЗУ может не хватить на всех пользователей  :smile3:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Kartze

 

 

у меня на тетрисе
ой вася, мог бы и не объяснять с: 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Недавно начал писать бота с использованием этой замечательной библиотеки, но к несчастью столкнулся с некоторыми недоработками.
Поэтому решено было доработать библиотеку 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

Изменено пользователем Asior
Обновление библиотеки

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Странно, у меня личные сообщения нормально обрабатываются.

Флаг для логирования можно тоже сунуть в конфиг.

Конфиг следует сделать в виде lua-таблицы - быстрей и меньше кода.

 

Изначально все задумывалось как программный модем между компами. Логин для NickServ и прочие изощрения поверх стандарта, пользователь должен был организовывать в своей программе. imodem это всего-лишь интерфейс, совместимый с OpenOS.

Хотя, да не сделал пинг в сторону сервера, каюсь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я просто добавил возможность узнать с какого канала говорят(если это ник бота то с лс) вот и все...

Все что я добавил, это:

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)

Вот и весь мой вклад)

Изменено пользователем Bit

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
20.02.2019 в 04:47, Doob сказал:

Странно, у меня личные сообщения нормально обрабатываются.

Попробуй отловить откуда какое сообщение пришло и кому придется библиотеке отвечать. Она никак не разделяет личное сообщение или из канала.

20.02.2019 в 04:47, Doob сказал:

Флаг для логирования можно тоже сунуть в конфиг.

Конфиг следует сделать в виде lua-таблицы - быстрей и меньше кода.

Флаг сунул, в конфиги тоже внес опцию по логированию.

Конфиги переделал, спасибо @Fingercomp и его ответам

Ссылка для установки все та же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Обновление!

Теперь интернет-модем это действительно библиотека.

Добавлено автоподключение при разрыве связи, проверка состояния, ручное подключение к серверу.

 

Переменные:

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Doob 

Так ведь подменяя пулсигналлу, ты же подменяешь её глобально. Нехорошо же это, разве нет?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не сказал бы. Очевидные плюсы - независимость от сторонних библиотек, получение информации из первых рук, экономия памяти.

Инъекция в процесс - хороший способ не мешать пользователю заниматься своими делами. Ограничения по типу main_loop как по мне - .очень сомнительная техника.

Можно было бы оформить в виде демона, который будет использовать свою логику и буфер для конвертации сигналов, но так мне показалось проще.

Для EEPROM можно сделать однострочник не меняя код, либо загрузить как библиотеку. Но в отдельном окружении все-таки безопасней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...