summaryrefslogtreecommitdiff
path: root/xmpp.lua
diff options
context:
space:
mode:
authorubq323 <ubq323@ubq323.website>2024-09-03 12:52:17 +0100
committerubq323 <ubq323@ubq323.website>2024-09-03 12:52:17 +0100
commitb3de433cfd4e39c8fe6d776e258db3b44a3ddd39 (patch)
tree1467b88252052836f6344793eee2fe51b7dc5947 /xmpp.lua
parent643e4202f4c5a5ee7a87779ffb69928e685db451 (diff)
more thing
Diffstat (limited to 'xmpp.lua')
-rw-r--r--xmpp.lua98
1 files changed, 64 insertions, 34 deletions
diff --git a/xmpp.lua b/xmpp.lua
index aebbee9..84400bb 100644
--- a/xmpp.lua
+++ b/xmpp.lua
@@ -1,72 +1,102 @@
-local jid = 'wilson@ubq323.website'
-local server = 'ubq323.website'
-local auth = 'AHdpbHNvbgBncmVnb3J5PDM='
-local resource = 'cheese'
-
+local xmpp_conf = {
+ jid='wilson@ubq323.website',
+ server='ubq323.website',
+ auth='AHdpbHNvbgBncmVnb3J5PDM=',
+ resource='cheese',
+ muc='d@conference.ubq323.website',
+}
local cqueues = require'cqueues'
local socket = require'cqueues.socket'
+local xml = require'xml'
+local X = xml.X
+local xmlify = xml.xmlify
+local pprint=require'pprint'
+local discord=require'discord'
-local function connect()
- local sock = assert(socket.connect(server, 5222))
+local function connect(conf)
+ local sock = assert(socket.connect(conf.server, 5222))
sock:setmode('bn','bn')
local start = ([[
-<?xml version='1.0'?><stream:stream from='%s' to='%s' version='1.0' xml:lang='en' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>]]):format(jid, server)
+<?xml version='1.0'?><stream:stream from='%s' to='%s' version='1.0' xml:lang='en' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>]]):format(conf.jid, conf.server)
-- state of the art xml parser
local function check_and_send(test, text)
local x = sock:read('-2048')
- print(x)
+ assert(x:find(test))
if text then sock:write(text) end
end
+ local function ietf_urn(v) return 'urn:ietf:params:xml:ns:xmpp-'..v end
sock:write(start)
- check_and_send('starttls', [[<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>]])
+ check_and_send('starttls', xmlify(X.starttls{xmlns=ietf_urn"tls"}))
check_and_send('proceed', nil)
sock:starttls()
sock:write(start)
check_and_send('PLAIN',
- ([[<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>%s</auth>]]):format(auth))
+ xmlify(X.auth{xmlns=ietf_urn"sasl", mechanism='PLAIN', conf.auth}))
check_and_send('success',start)
- check_and_send('bind', ([[<iq type='set' id='aaa'>
- <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><resource>%s</resource></bind></iq>
- ]]):format(resource))
- check_and_send('jid','<presence/>')
+ check_and_send('bind',
+ xmlify(X.iq{type='set', id='aaaa',
+ X.bind{xmlns=ietf_urn"bind", X.resource{conf.resource}}}))
+ check_and_send('jid',X.presence{X.show{'chat'}})
return sock
end
-local mucs = {
- 'ja@conference.ubq323.website',
- 'a@conference.ubq323.website',
-}
+-- local mucs = {
+-- 'ja@conference.ubq323.website',
+-- 'a@conference.ubq323.website',
+-- }
-local xml = require'xml'
-local pprint=require'pprint'
-local function run_xmpp()
- local sock = connect()
+local function run_xmpp(cq)
+ local sock = connect(xmpp_conf)
+
+ -- sock:write(xmlify(
+ -- X.presence{to=xmpp_conf.muc..'/wilson',
+ -- X.x{xmlns='http://jabber.org/protocol/muc',
+ -- X.history{maxstanzas='0'}}}))
+
+
+ -- cq:wrap(function()
+ -- local n = 1
+ -- while true do
+ -- sock:write(xmlify(
+ -- X.message{to=xmpp_conf.muc, type='groupchat',
+ -- id='wilson_episode_'..n,
+ -- X.body{'i too am in episode '..n}}))
+ -- n=n+1
+ -- cqueues.sleep(60)
+ -- end
+ -- end)
+
+ sock:write(xmlify(
+ X.iq{type='get',to=xmpp_conf.muc, id='info1',
+ X.query{xmlns='http://jabber.org/protocol/disco#info'}}))
- for _, muc in ipairs(mucs) do
- sock:write(([[
- <presence to='%s'>
- <x xmlns='http://jabber.org/protocol/muc'>
- <history maxstanzas='0'/>
- </x>
- </presence>]]):format(muc .. '/wilson'))
- end
for x in xml.stanzae(function() return sock:read('-2048') end) do
- -- pprint(x)
+ pprint(x)
+ print(xmlify(x))
local body = x'body' and x'body'[1]
- if x.label == 'message' then pprint('M', x.xarg.from, body) end
+ if x.label == 'message' then
+ pprint('M', x.xarg.from, body)
+ if body == 'hi wilson' then
+ sock:write(xmlify(
+ X.message{to=xmpp_conf.muc, type='groupchat',
+ X.body{'hi '..x.xarg.from..'.'}}))
+ end
+ -- discord.grom(x.xarg.from, body or '*(there\'s no body here)*')
+ end
end
end
local cq = cqueues.new()
-cq:wrap(run_xmpp)
+cq:wrap(run_xmpp, cq)
+
pprint(cq:loop())