Skip to content

Instantly share code, notes, and snippets.

@dmitriid
Created February 24, 2016 09:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dmitriid/65871cbd7f632516789f to your computer and use it in GitHub Desktop.
Save dmitriid/65871cbd7f632516789f to your computer and use it in GitHub Desktop.
A bright and glorious vision of da future!
# Plugins
#
# Плагину достаточно выставить наружу command, принимающую context
#
# Где context — это
# %{ :scope => :jabber, # или там :slack или там :icq
# :from => ...,
# :to => ...,
# :room => ...
# }
#
# Плагин реагирует на команды через match и respond:
# match r/.../, do
# что-то делаем
# respond "что-то там"
# end
#
# respond "что-то там" эквивалентно respond("что-то-там", context)
# из context Erobot вытянет что куда зачем отвечать (коннкшн, комнату и т.п.)
#
# чтобы реагировать на команды только в жабере, например, или только в irc
# match'и можно привязать к определенному scope'у
#
# scope :jabber do
# match r/.../, do
# что-то делаем
# respond "что-то там"
# end
# end
#
# TODO: как среагировать на команду в одном скоупе, а respond в другой?
defmodule Erobot.SomePlugin do
require Erobot.Plugin
def command(context) do
scope :slack, do
match r/siskipiski/ do
respond "NSFW!"
end
match r/piskisiski/ do
respond "!WFSN"
end
end
scope :jabber do
...
end
end
end
#
# Scopes
#
# Scope — это сущность, отвечающая за связь (с жабером, слаком и т.п.)
#
# Выставить наружу connect, respond, provides
#
# - connect вызывается при запуске, чтобы установить соединение
# - respond вызывается, когда какой-либо плагин вызывает respond с этим scope'ом
# - provides выставляет наружу атом-название скоупа
#
defmodule Erobot.XMPPScope do
require Erobot.Scope
provides :jabber
def connect() do
# читаем конфиг
# присоединяемся
# при получении сообщения вызываем
# Erobot.message(context)
# где context описан вверху
end
def respond(message) do
# отсылаем сообщение
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment