Module:Cite tweet
local TwitterSnowflake = require('Module:TwitterSnowflake')
 local CiteWeb = require('Module:Cite web')['']
 local getArgs = require('Module:Arguments').getArgs
 
 local p = {}
 
 local function _if(arg)
 	return arg and arg ~= '' or nil
 end
 
 p.main = function(frame)
 	local args = getArgs(frame)
 	return p._main(frame, args)
 end
 
 p._main = function(frame, args)
 	local cite_args = {
 		url 		= 'https://twitter.com/' .. ((args.user and args.number) and (args.user .. '/status/' .. args.number) or ''),
 		title		= (args.title or ''):gsub('https*://', ''),
 		['script-title'] = args['script-title'],
 		['trans-title'] = args['trans-title'],
 		language	= args.language,
 		['author-link'] = args['author-link'] or args.authorlink,
 		others		= _if(args.retweet) and ('Retweeted by ' .. args.retweet),
 		via 		= args.link == 'no' and 'Twitter' or '[[Twitter]]',
 		type		= 'Tweet',
 		location	= args.location,
 		['access-date'] = args['access-date'] or args.accessdate,
 		['archive-date'] = args['archive-date'] or args.archivedate,
 		['archive-url'] = args['archive-url'] or args.archiveurl,
 		['url-status'] = args['url-status'] or args['dead-url'] or args.deadurl,
 		quote	= args.quote,
 		ref			= args.ref,
 		df			= args.df,
 	}
 	if _if(args.last1 or args.last) then
 		cite_args.author = (args.last1 or args.last) ..
 			(_if(args.first1 or args.first) and (', ' .. (args.first1 or args.first)) or '') ..
 			' [@' .. (args.user or '') .. ']'
 	elseif _if(args.author1 or args.author) then
 		cite_args.author = (args.author1 or args.author) .. ' [@' .. (args.user or '') .. ']'
 	elseif _if(args['author-link']) then
 		cite_args.author = args['author-link'] .. ' [@' .. (args.user or '') .. ']'
 	else
 		cite_args.author = '@' .. (args.user or '')
 	end
 	if cite_args.author:find ('[Tt]witter') then
 		cite_args.author = '((' .. cite_args.author .. '))'
 	end
 	if _if(tonumber(args.number)) then
 		cite_args.date = args.date or (_if(args.number) and TwitterSnowflake.snowflakeToDate{ args = {id_str = args.number} })
 	else
 		cite_args.date = args.date
 	end
 	
 	frame.args = cite_args
 	local output = CiteWeb(frame)
 	
 	-- Error checking
 	local error_template = '&lt;span class=&quot;cs1-visible-error citation-comment&quot;&gt;%s&lt;/span&gt;'
 	local errors = {}
 	if not (_if(args.title) or _if(args['script-title']) or args.user or args.number or args.date) then
 		-- No title; error message is provided by CS1 module.
 		errors[1] = ';'
 	end
 	if not _if(args.user) then
 		errors[1 + #errors] = ' Missing or empty &lt;kbd&gt;&amp;#124;user=&lt;/kbd&gt;;'
 	end
 	if not _if(args.number) then
 		errors[1 + #errors] = ' Missing or empty &lt;kbd&gt;&amp;#124;number=&lt;/kbd&gt;;'
 	end
 	errors[1 + #errors] = TwitterSnowflake.datecheck{ args = {
 		id_str	= args.number or '',
 		date	= args.date or '',
 		error1	= ' &lt;kbd&gt;&amp;#124;date=&lt;/kbd&gt; mismatches calculated date from &lt;kbd&gt;&amp;#124;number=&lt;/kbd&gt; by two or more days;',
 		error2  = ' Missing or empty &lt;kbd&gt;&amp;#124;date=&lt;/kbd&gt;, and posted before November 4, 2010;',
 		error3	= ' Invalid &lt;kbd&gt;&amp;#124;number=&lt;/kbd&gt; parameter;'
 	}}
 	if errors[1] then
 		local last = errors[#errors]
 		errors[#errors] = last:sub(1, #last - 1) .. ' ([[Template:Cite_tweet#Error_detection|help]])'
 		local error_out = error_template:rep(#errors):format(unpack(errors)) 
 		if mw.title.getCurrentTitle():inNamespace(0) then
 			error_out = error_out .. '[[Category:Cite tweet templates with errors]]'
 		end
 		output = output .. error_out
 	end
 	return output
 end